qq_37242775 2017-01-04 04:06 采纳率: 0%
浏览 1009
已结题

POJ 1626 有程序求解析。!!!!!!

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long lld;
#define mp make_pair
#define pb push_back
#define X first
#define Y second
#define eps 1e-8
#define pi acos(-1.0)
int Sig(double a)
{
if(a < -eps)
return -1;
return a > eps;
}
struct Point
{
double x,y;
Point(){}
Point(double x0,double y0):x(x0),y(y0){}
void in()
{
scanf("%lf %lf",&x,&y);
}
double len()
{
return sqrt(x*x+y*y);
}
Point operator -(Point pt)
{
return Point(x-pt.x,y-pt.y);
}
};
struct Edge
{
int v,next;
}edge[1000010];
int head[110];
int pos;
void insert(int x,int y)
{
edge[pos].v=y;
edge[pos].next=head[x];
head[x]=pos++;
}
bool in[20];
struct Event
{
double s;
int flag,id;
Event(){}
Event(double s0,int flag0,int id0):s(s0),flag(flag0),id(id0){}
}pp[110];
int qq;
bool cmp(Event a,Event b)
{
return a.s < b.s;
}
Point p[110];
int T1,T2;
int dp[1< int dfs(int mask,int flag)
{
if(dp[mask][flag] != -1)
return dp[mask][flag];
if(flag == 0)
{
if(!(mask&T1))
return 0;
for(int k=0;k if(mask&(1 {
for(int i=head[k];i;i=edge[i].next)
{
int to=edge[i].v;
int next=mask;
next|=1 next^=1 next|=to;
next^=to;
if(!dfs(next,flag^1))
{
dp[mask][flag]=1;
return 1;
}
}
}
dp[mask][flag]=0;
return 0;
}
else
{
if(!(mask&T2))
return 0;
for(int k=8;k if(mask&(1 {
for(int i=head[k];i;i=edge[i].next)
{
int to=edge[i].v;
int next=mask;
next|=1 next^=1 next|=to;
next^=to;
if(!dfs(next,flag^1))
{
dp[mask][flag]=1;
return 1;
}
}
}
dp[mask][flag]=0;
return 0;
}
return (int)"you are so pretty";
}
int main()
{
T1=T2=0;
for(int i=0;i T1+=1 for(i=8;i T2+=1 while(scanf("%lf %lf",&p[0].x,&p[0].y)!=EOF)
{
for(int i=1;i p[i].in();
memset(head,0,sizeof(head));
pos=1;
for(i=0;i {
qq=0;
int T=0;
memset(in,false,sizeof(in));
for(int j=0;j {
if(i == j)
continue;
double d=(p[i]-p[j]).len();
double add=asin(0.8/d);
double angle=atan2(p[j].y-p[i].y,p[j].x-p[i].x);
pp[qq++]=Event(angle-add-eps,-1,j);
pp[qq++]=Event(angle+add+eps,1,j);
}
for(j=0;j {
while(pp[j].s pp[j].s+=pi*2;
while(pp[j].s > pi*2)
pp[j].s-=pi*2;
}
sort(pp,pp+qq,cmp);
for(j=0;j<qq;j++)
{
int id=pp[j].id;
if(pp[j].flag == -1)
in[id]=true;
else
in[id]=false;
}
int mask;
for(j=0;j<qq;j++)
{
int id=pp[j].id;
mask=0;
for(int k=0;k<16;k++)
if(in[k])
mask|=1<<k;
insert(i,mask+T);
if(pp[j].flag == -1)
in[id]=true;
else
in[id]=false;

        }
    }
    memset(dp,-1,sizeof(dp));
    if(dfs((1<<16)-1,0))
        printf("RED\n");
    else
        printf("WHITE\n");
}
return 0;

}

不知道这个游戏是怎么执行的。有没有大神来提点一下。!谢谢

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2017-01-14 15:21
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决