1 //题意:S 和 O 二人玩游戏 。N颗石头,M个数,每次拿 M[i]个石头(i>0 && i<m) ,谁拿到最后一个谁赢。 2 3 // 定义f[i]为还剩i颗石头时的胜负情况 ,若S胜利,则记 1 , 4 #include<cstdio> 5 #include<cstring> 6 #include<algorithm> 7 using namespace std; 8 int f[1000005],a[11]; 9 int main() 10 { 11 int n,m; 12 while(scanf("%d",&n)!=EOF) 13 { 14 scanf("%d",&m); 15 for(int i=0;i<m;i++) 16 scanf("%d",&a[i]); 17 f[0]=0; 18 for(int i=1;i<=n;i++) 19 { 20 f[i]=0; 21 for(int j=0;j<m;j++) 22 { 23 if(i>=a[j] && f[i-a[j]]==0) // 当剩余石头大于或等于m个数的其中一个 ,并且f[i-a[j]]==0,即刚好拿完,这是S胜,记 1 24 { 25 f[i]=1; break; 26 } 27 } 28 } 29 if(f[n]) printf("Stan wins\n"); 30 else printf("Ollie wins\n"); 31 } 32 return 0; 33 }
时间: 2024-10-10 05:45:52