クラシック海賊分金問題(hdu 1538)

5431 ワード

これは古典的な問題で、n人の海賊がいて、m枚の金を分けて、その中で彼らは一定の順序で自分の分配案を提出して、50%以上の人が賛成すれば、案は通過して、金を分け始めて、通過しなければ、提案案を海に投げて、次の人は続けます.考え方:上のブログはもう詳しく話しました.
#include
#include
#include
#include
using namespace std;
int x[15]= {2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};
int main()
{
    int ncase;
    scanf("%d",&ncase);
    while(ncase--)
    {
        int n,m,p;
        scanf("%d%d%d",&n,&m,&p);
        if(n<=2*m)// 
        {
            if(p==n)
                printf("%d
"
,m-(n-1)/2); else if(p%2==n%2) printf("1
"
); else printf("0
"
); } else if(n==2*m+1)// { if(p==n) printf("0
"
); else if(p%2==n%2) printf("1
"
); else printf("0
"
); } else if(n>2*m+1)// , { int t=n-2*m,flag=0; for(int i=0; i<15; i++) { if(t==x[i]) printf("0
"
); flag=1; break; } if(!flag) for(int i=0; i<15; i++) { if(t<x[i]) { if(p>x[i-1]+2*m&&p<x[i]+2*m) printf("Thrown
"
); else printf("0
"
); break; } } } } }