zoukankan      html  css  js  c++  java
  • HDU-4664 Triangulation 博弈,SG函数找规律

      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664

      题意:一个平面上有n个点(一个凸多边形的顶点),每次可以连接一个平面上的两个点(不能和已经连接的边相交),如果平面上已经出现了一个三角形,则不能在这个平面上继续连接边了。

      首先在最优情况下,优先考虑的是一个点不连两条直线,否则就直接输了。因此一个n个点的局面连了一条直线后,分为了两个子游戏,i个点和n-i-2个点,则sg[n]=mex(sg[n]^sg[n-i-2])。然后打表找规律,发现大于n大于68后就是34的循环节了。

     1 //STATUS:C++_AC_203MS_428KB
     2 #include <functional>
     3 #include <algorithm>
     4 #include <iostream>
     5 //#include <ext/rope>
     6 #include <fstream>
     7 #include <sstream>
     8 #include <iomanip>
     9 #include <numeric>
    10 #include <cstring>
    11 #include <cassert>
    12 #include <cstdio>
    13 #include <string>
    14 #include <vector>
    15 #include <bitset>
    16 #include <queue>
    17 #include <stack>
    18 #include <cmath>
    19 #include <ctime>
    20 #include <list>
    21 #include <set>
    22 #include <map>
    23 using namespace std;
    24 #pragma comment(linker,"/STACK:102400000,102400000")
    25 //using namespace __gnu_cxx;
    26 //define
    27 #define pii pair<int,int>
    28 #define mem(a,b) memset(a,b,sizeof(a))
    29 #define lson l,mid,rt<<1
    30 #define rson mid+1,r,rt<<1|1
    31 #define PI acos(-1.0)
    32 //typedef
    33 typedef __int64 LL;
    34 typedef unsigned __int64 ULL;
    35 //const
    36 const int N=110;
    37 const int INF=0x3f3f3f3f;
    38 const LL MOD=1000000007,STA=8000010;
    39 const LL LNF=1LL<<55;
    40 const double EPS=1e-9;
    41 const double OO=1e30;
    42 const int dx[4]={-1,0,1,0};
    43 const int dy[4]={0,1,0,-1};
    44 const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    45 //Daily Use ...
    46 inline int sign(double x){return (x>EPS)-(x<-EPS);}
    47 template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
    48 template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
    49 template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
    50 template<class T> inline T Min(T a,T b){return a<b?a:b;}
    51 template<class T> inline T Max(T a,T b){return a>b?a:b;}
    52 template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
    53 template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
    54 template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
    55 template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
    56 //End
    57 
    58 int sg[N];
    59 int vis[N];
    60 int T,n;
    61 
    62 void Init()
    63 {
    64     int i,j;
    65     sg[1]=sg[0]=0;
    66     int n=110;
    67     for(i=2;i<n;i++){
    68         mem(vis,0);
    69         for(j=0;i-j-2>=0;j++)vis[sg[j]^sg[i-j-2]]=1;
    70         for(j=0;vis[j];j++);
    71         sg[i]=j;
    72     }
    73 }
    74 
    75 inline int getsg(int a)
    76 {
    77     return a<=68?sg[a]:sg[68+(a%34?a%34:34)];
    78 }
    79 
    80 int main(){
    81  //   freopen("in.txt","r",stdin);
    82     int i,j,sg,a;
    83     scanf("%d",&T);
    84     Init();
    85     while(T--)
    86     {
    87         scanf("%d",&n);
    88         sg=0;
    89         while(n--){
    90             scanf("%d",&a);
    91             sg=sg^getsg(a);
    92         }
    93 
    94         printf("%s
    ",sg?"Carol":"Dave");
    95     }
    96     return 0;
    97 }
  • 相关阅读:
    Java如何编写自动售票机程序
    install windows service
    redis SERVER INSTALL WINDOWS SERVICE
    上传文件
    This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.
    解决Uploadify上传控件加载导致的GET 404 Not Found问题
    OracleServiceORCL服务不见了怎么办
    Access to the temp directory is denied. Identity 'NT AUTHORITYNETWORK SERVICE' under which XmlSerializer is running does not have sufficient permiss
    MSSQL Server 2008 数据库安装失败
    数据库数据导出成XML文件
  • 原文地址:https://www.cnblogs.com/zhsl/p/3250897.html
Copyright © 2011-2022 走看看