Alice and Bob
#include<iostream> #include<cstring> using namespace std; const int N=5010; int t; int n,m; bool f[N][N]; int main(){ // for(int i=0;i<=5000;i++) // for(int j=0;j<=5000;j++){ // if(!f[i][j]){ // for(int k=1;k+i<=5000;k++) // for(int s=0;j+s*k<=5000;s++) // f[i+k][j+k*s]=1; // for(int k=1;k+j<=5000;k++) // for(int s=0;i+s*k<=5000;s++) // f[i+s*k][k+j]=1; // } // } for(int i=0;i<=5000;i++) for(int j=0;j<=5000;j++){ if(!f[i][j]){ for(int k=1;i+k<=5000;k++) for(int s=0;j+s*k<=5000;s++) f[i+k][j+s*k]=1; for(int k=1;j+k<=5000;k++) for(int s=0;i+s*k<=5000;s++) f[i+s*k][j+k]=1; } } scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); if(f[n][m]) puts("Alice"); else puts("Bob"); } }
Hash Function
#include<iostream> #include<map> #include<algorithm> using namespace std; const int N=500010; int n; int a[N]; map<int,int> mp; int head=1; bool check(int x){ while(a[head]<x){ mp[a[head]%x]=1; ++head; } for(int i=head;i<=n;i++){ if(!mp[a[i]%x]) mp[a[i]%x]=1; else{ for(int j=head;j<i;j++) mp[a[j]%x]=0; return false; } } return true; } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=n;;i++){ if(check(i)){ printf("%d",i); break; } } }