日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 3553 Light Switching Game 博弈论 nim积 sg函数

發布時間:2024/4/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 3553 Light Switching Game 博弈论 nim积 sg函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://poj.org/problem?id=3533

變成三維的nim積。。前面hdu那個算二維nim積的題的函數都不用改,多nim積一次就過了。。。longlong似乎不必要但是還是加上了

代碼

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 #include<map> 7 #include<ctime> 8 using namespace std; 9 long long n; 10 long long sg[21][21]={}; 11 long long f(long long,long long); 12 long long g(long long x,long long y){ 13 if(sg[x][y]!=-1)return sg[x][y]; 14 if(!x)return sg[x][y]=1<<y; 15 if(!y)return sg[x][y]=1<<x; 16 long long ans=1,k=1,t; 17 long long x1=x,y1=y; 18 while(x||y){ 19 t=1<<k; 20 if((x^y)&1){ 21 ans*=t; 22 } 23 x>>=1;y>>=1;k<<=1; 24 } 25 k=1;x=x1;y=y1; 26 while(x||y){ 27 t=1<<k; 28 if((x&y)&1){ 29 ans=f(ans,t/2*3); 30 } 31 x>>=1;y>>=1;k<<=1; 32 }return sg[x1][y1]=ans; 33 } 34 long long f(long long x,long long y){ 35 if(!x||!y)return 0; 36 if(x==1)return y; 37 if(y==1)return x; 38 long long ans=0; 39 for(long long i=x,a=0;i;i>>=1,a++){ 40 if(!(i&1))continue; 41 for(long long j=y,b=0;j;j>>=1,b++){ 42 if(!(j&1))continue; 43 ans^=g(a,b); 44 } 45 }return ans; 46 } 47 int main(){ 48 memset(sg,-1,sizeof(sg)); 49 while(~scanf("%lld",&n)){ 50 long long ans=0,x,y,z; 51 for(long long i=1;i<=n;i++){ 52 scanf("%lld%lld%lld",&x,&y,&z); 53 ans^=f(z,f(x,y)); 54 } 55 if(ans)printf("No\n"); 56 else printf("Yes\n"); 57 } 58 return 0; 59 } View Code

?

轉載于:https://www.cnblogs.com/137shoebills/p/8340884.html

總結

以上是生活随笔為你收集整理的POJ 3553 Light Switching Game 博弈论 nim积 sg函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。