HDOJ 5299 Circles Game 圆嵌套+树上SG
将全部的圆化成树,然后就能够转化成树上的删边博弈问题....
Circles Game
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 881 Accepted Submission(s): 255
Alice and Bob are playing a game concerning these circles.They take turn to play,Alice goes first:
1、Pick out a certain circle A,then delete A and every circle that is inside of A.
2、Failling to find a deletable circle within one round will lost the game.
Now,Alice and Bob are both smart guys,who will win the game,output the winner's name.
As for the following T groups of statistic,the first line of every group must include a positive integer n to define the number of the circles.
And the following lines,each line consists of 3 integers x,y and r,stating the coordinate of the circle center and radius of the circle respectively.
n≤20000,|x|≤20000,|y|≤20000。r≤20000。
2
1
0 0 1
6
-100 0 90
-50 0 1
-20 0 1
100 0 90
47 0 1
23 0 1
Alice
Bob
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector> using namespace std; #pragma comment(linker, "/STACK:1024000000,1024000000") const int maxn=20200; int n;
struct Circle
{
int x,y,r;
bool operator<(const Circle& cir) const
{
return r>cir.r;
}
}circle[maxn]; double dist(int a,int b)
{
return sqrt((circle[a].x-circle[b].x)*(circle[a].x-circle[b].x)
+(circle[a].y-circle[b].y)*(circle[a].y-circle[b].y));
} vector<int> edge[maxn]; void Link(int u,int x)
{
bool fg=true;
for(int i=0,sz=edge[u].size();i<sz;i++)
{
int v=edge[u][i];
double dd=dist(x,v);
if(dd+circle[x].r>circle[v].r) continue;
fg=false;
Link(v,x);
return ;
}
if(fg) edge[u].push_back(x);
} int dp[maxn]; void dfs(int u)
{
int ret=-1;
for(int i=0,sz=edge[u].size();i<sz;i++)
{
int v=edge[u][i];
dfs(v);
if(ret==-1) ret=dp[v]+1;
else ret^=dp[v]+1;
}
if(ret==-1) ret=0;
dp[u]=ret;
} int main()
{
int T_T;
scanf("%d",&T_T);
while(T_T--)
{
scanf("%d",&n);
for(int i=1,x,y,r;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&r);
//circle[i]=(Circle){x,y,r};
circle[i].x=x;
circle[i].y=y;
circle[i].r=r;
edge[i].clear();
}
edge[0].clear();
sort(circle+1,circle+1+n);
for(int i=1;i<=n;i++)
{
Link(0,i); dp[i]=0;
}
dfs(0);
if(dp[0]==0) puts("Bob");
else puts("Alice");
}
return 0;
}
HDOJ 5299 Circles Game 圆嵌套+树上SG的更多相关文章
- HDU 5299 Circles Game
HDU 5299 思路: 圆扫描线+树上删边博弈 圆扫描线有以下四种情况,用set维护扫描线与圆的交点,重载小于号 代码: #pragma GCC optimize(2) #pragma GCC op ...
- [SPOJ-CIRU]The area of the union of circles/[BZOJ2178]圆的面积并
[SPOJ-CIRU]The area of the union of circles/[BZOJ2178]圆的面积并 题目大意: 求\(n(n\le1000)\)个圆的面积并. 思路: 对于一个\( ...
- 【题解】CIRU - The area of the union of circles [SP8073] \ 圆的面积并 [Bzoj2178]
[题解]CIRU - The area of the union of circles [SP8073] \ 圆的面积并 [Bzoj2178] 传送门: \(\text{CIRU - The area ...
- 计数方法,博弈论(扫描线,树形SG):HDU 5299 Circles Game
There are n circles on a infinitely large table.With every two circle, either one contains another o ...
- HDU 5299 Circles Game 博弈论 暴力
Circles Game 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5299 Description There are n circles on ...
- hdu 3094 A tree game 树上sg
A tree game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob ...
- 【UVALive 4642】Malfatti Circles(圆,二分)
题 给定三角形,求三个两两相切且与三角形的一条边相切的圆的半径. 二分一个半径,可以得出另外两个半径,需要推一推公式(太久了,我忘记了) #include<cstdio> #include ...
- 【百题留念】hdoj 1524 A Chess Game(dfs + SG函数应用)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1524 #include<stdio.h> #include<cstring> ...
- SPOJ CIRU - The area of the union of circles (圆的面积并)
CIRU - The area of the union of circles no tags You are given N circles and expected to calculate t ...
随机推荐
- PHP 7给我震撼
看了一些php7(ng)的讨论,目前还没有去下beta版尝试编译. 作为一个phper,一直都有关注php本身语言的发展.以前在jumei工作的时候就听罗sir谈到过php ng,性能将超过faceb ...
- 多线程编程TSL相关的技术文档
线程本地存储 (TLS) https://msdn.microsoft.com/zh-cn/library/6yh4a9k1(v=vs.80).aspx Using Thread Local Stor ...
- 杂项-项目管理:WBS(工作分解结构)
ylbtech-杂项-项目管理:WBS(工作分解结构) WBS:工作分解结构(Work Breakdown Structure) 创建WBS:创建WBS是把项目 交付成果和项目工作分解成较小的,更易于 ...
- php的异步并行扩展swoole
Swoole是PHP的异步并行扩展,有点像Node.js,但swoole既支持同步又支持异步,比node更强大.Swoole扩展是基于epoll高性能事件轮询,并且是多线程的,性能非常好. Swool ...
- 完整注册+JQuery验证+selert后台校验
Java代码 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- ubuntu在桌面创建快捷方式
在/usr/share/applications下列出 *.desktop文件 例如: 首先查看所要创建的快捷方式有么有: ls /usr/share/applications | grep ecli ...
- 函数与装饰器Python学习(三)
1.1 文件处理 1.1.1 打开文件过程 在Python中,打开文件,得到文件句柄并赋值给一个变量,默认打开模式就为r f=open(r'a.txt','w',encoding='utf-8') p ...
- Android使用Dribble Api
使用Dribble提供的Api获取上面的设计分享 使用了Material Design.SceneTransitionAnimation 使用了Volley Gson 1. 申请Dribble开发者应 ...
- python pip fatal error in launcher unable to create process using
用pip安装一个包,不知道为啥,就报了这个错误:python pip fatal error in launcher unable to create process using “” 百度了一下 ...
- Linux网络配置、文件及命令
Linux的网络配置是曾一直是我学习Linux的埋骨之地,投入了大量的精力和心神但是自己的虚拟机就是联不了网.原来一个大意,我一躺就是一年半.在这里简单的谈谈我对网络的微微认识. VMware的联网模 ...