クラシック海賊分金問題(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;
}
}
}
}
}