2015年6月8日 星期一

[CF 549C] The Game Of Parity

作法:

記總共有$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") ;
}
 

沒有留言:

張貼留言