記總共有$x$個奇數和$y$個偶數。首先發現,如果最後一個人拿的時候奇數和偶數都至少還有一個,那他就贏了,因為他一定可以選其中一個使得他贏。所以非最受一手的那人就要想辦法把其中一堆拿光。這樣就分成四種情況:先手/後手最後拿、還有$k$是奇數/偶數。當先手最後拿時,如果$k$是奇數,那麼後手只能把$x$拿光,否則後手可以選擇把$x$拿光或把$y$拿光。當後手最後拿時,如果$k$是奇數,那麼先手就必須把$y$拿光,$k$是偶數時則必為後手贏。最後要記得判掉$n=k$的情形,這東西陰了一堆人=ㄦ=
code :
#include<bits/stdc++.h> using namespace std; main() { int n,k ; scanf("%d%d",&n,&k) ; int x=0 , y=0 ; for(int i=1;i<=n;i++) { int t ; scanf("%d",&t) ; if(t%2) x++ ; else y++ ; } if(n==k){printf("%s\n",x%2 ? "Stannis" : "Daenerys") ; return 0 ;} int val=n-k ; if(val%2 && k%2) printf("%s\n",2*x<val ? "Daenerys" : "Stannis") ; else if(val%2) printf("%s\n",(2*x<val || 2*y<val) ? "Daenerys" : "Stannis") ; else if(k%2) printf("%s\n",2*y<=val ? "Stannis" : "Daenerys") ; else printf("Daenerys\n") ; }
沒有留言:
張貼留言