hdu4664 Triangulation 多校第六场
来源:互联网 发布:vb中str是什么意思 编辑:程序博客网 时间:2024/05/15 04:27
其实这题看懂了就很好搞了。
每次加边,不能形成三角形,所以肯定不加共点的边,否则就是自杀。
x个点,转移后相当于 i , x-i-2 .加的那两个点去掉了。
SG函数打表以后,很明显是要找规律。
发现周期是34.
而且周期要到后面才有周期。
所以前面打表,后面利用周期。
可以参考下oeis,发现这个是经典的问题。Sprague-Grundy values for Dawson's Chess
点击打开链接
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define clr(a, x) memset(a, x, sizeof(a))const int MAXN = 100010;int sg[121];bool vis[121];int mex(int x){ if(sg[x]!=-1)return sg[x]; if(x == 0||x == 1)return sg[x] = 0; if(x == 2||x == 3)return sg[x] = 1; clr(vis,0); for(int i = 0;i < x-1;i++) vis[mex(i)^mex(x-i-2)] = 1; for(int i = 0;;i++) if(!vis[i]) return sg[x] = i;}int SG(int x){ if(x <= 120) return sg[x]; x=x%34+2*34; return sg[x];}int main(){ clr(sg,-1); for(int i = 0;i <= 120;i++) sg[i] = mex(i); int T,n,a; scanf("%d",&T); while(T--) { scanf("%d",&n); int sum = 0; for(int i = 0;i < n;i++) scanf("%d",&a),sum ^= SG(a); if(sum) puts("Carol"); else puts("Dave"); } return 0;}
- hdu4664 Triangulation 多校第六场
- HDU4664 Triangulation sg函数
- 2013 多校第六场 hdu 4664 Triangulation(SG问题)
- HDU4664
- 多校练习第六场
- hdu 4664 Triangulation/杭电多校2013第六场1010, SG定理+找规律
- 多校第六场1008---MU Puzzle
- hdu4655 yy+推导 多校第六场
- 2014多校联合-第六场
- HDOJ多校联合第六场
- HDU5353.Average(多校第六场)
- 2015多校联合第六场 hdu5360hiking
- hdu 4662 MU Puzzle 多校第六场
- 2013 多校第六场 hdu 4662 MU Puzzle
- hdu 4662 MU Puzzle 13多校第六场
- hdu 4658 整数划分+五边形定理 多校第六场
- 2013 多校第六场 hdu 4655 Cut Pieces
- 2013 多校第六场 hdu 4665 Unshuffle
- Windows下通过脚本快速修改IP地址
- Oracle表空间常用操作
- HDU 3714
- 基于计数排序的基数排序算法
- Java中数组与List的相互转换
- hdu4664 Triangulation 多校第六场
- hdu 4320 Arcane Numbers 1(小数进制转化后是否有限位)
- Struts2上传文件类型分类整理
- ubuntu server 12.04固定ip、dns
- UINavigationController使用详解
- Oracle 表的常见操作
- HDU1698 Just a Hook 解题报告--线段树
- 基于BVH驱动的OGRE骨骼动画
- string对象易错点