hdu 5299 Circles Game(博弈)
来源:互联网 发布:淘宝网副总裁张勤 编辑:程序博客网 时间:2024/05/16 17:20
题目链接:hdu 5299 Circles Game
每个分离的圆都是单独的游戏,Nim值为该圆嵌套中的圆的Nim和,最后加1.
#include <cstdio>#include <cstring>#include <vector>#include <set>#include <algorithm>using namespace std;const int maxn = 20005;typedef long long ll;struct Circle { int x, y, r; void input() { scanf("%d%d%d", &x, &y, &r); }}C[maxn];int N, Nim[maxn];vector<int> G[maxn];inline bool cmp(const Circle& a, const Circle& b) { return a.x < b.x;}inline int distance(int a, int b) { return a * a + b * b;}bool judge(const Circle& a, const Circle& b) { return (a.r > b.r) && distance(a.x - b.x, a.y - b.y) < a.r * a.r;}int fa[maxn];void init () { scanf("%d", &N); memset(Nim, -1, sizeof(Nim)); for (int i = 0; i < N; i++) { fa[i] = i; C[i].input(); G[i].clear(); } sort(C, C + N, cmp); for (int i = 0; i < N; i++) { for (int j = i + 1; j < N && C[j].x - C[i].x <= C[i].r; j++) { if (judge(C[i], C[j])) { if (fa[j] == j) fa[j] = i; else { if (C[i].r < C[fa[j]].r) fa[j] = i; } } } for (int j = i - 1; j >= 0 && C[i].x - C[j].x <= C[i].r; j--) { if (judge(C[i], C[j])) { if (fa[j] == j) fa[j] = i; else { if (C[i].r < C[fa[j]].r) fa[j] = i; } } } } for (int i = 0; i < N; i++) { if (fa[i] != i) G[fa[i]].push_back(i); }}int SG(int u) { if (Nim[u] != -1) return Nim[u]; int& ret = Nim[u]; ret = 0; for (int i = 0; i < G[u].size(); i++) ret ^= SG(G[u][i]); ret += 1; return ret;}int main () { int cas; scanf("%d", &cas); while (cas--) { init(); int ans = 0; for (int i = 0; i < N; i++) { if (fa[i] == i) ans ^= SG(i); } printf("%s\n", ans ? "Alice" : "Bob"); } return 0;}
0 0
- hdu 5299 Circles Game(博弈)
- HDU 5299 Circles Game(树&博弈)
- [多校2015.01.1012 博弈] hdu 5299 Circles Game
- HDU 5299 Circles Game
- HDU 5299 Circles Game
- hdu 5299 Circles Game
- HDU 5299 Circles Game
- hdu 5299 Circles Game
- 组合游戏(Circles Game,HDU 5299)
- hdu 5299——Circles Game
- hdu 5299 Circles Game 2015 Multi-University Training Contest 1 计算几何+博弈SG函数 圆的扫描线
- HDU 4023 Game (博弈)
- HDU 3389 Game(博弈)
- hdu 4701 Game(博弈)
- hdu 5299(树上删边游戏) Circles Game
- hdu 5299 Circles Game 2015 Multi-University Training Contest 1
- HDU 5299 Circles Game (圆的扫描线+树上SG)
- HDU 5299 Circles Game(树的删边游戏)
- hdu 5298 Solid Geometry Homework(几何)
- PDM与Excel利用VB脚本进行互导
- ubuntu下搭建rust到intellij开发环境
- XML基本知识
- API注册表函数
- hdu 5299 Circles Game(博弈)
- 翻转子串
- oc构造方法
- 创建Struts2项目
- KMP算法
- html学习笔记
- ShellExecute使用详解
- epoll的两种触发模式
- iOS开发轻松搞定C语言面试—— 算法