Sicily/1018. A Card Trick[Special judge]
2011-06-30 20:52 Min·zc 阅读(234) 评论(0) 编辑 收藏 举报/*按照题意直接模拟就可以了
*将所有的牌面都转化成数字
*
*
*/
#include <iostream>
#include <memory.h>
using namespace std;
int cd[5];
char w[3];
int tem[5];
int getsp()
{
int s=tem[2];
int sp=2;
for(int i=2;i<5;i++)
{
if(tem[i]<s)
{
s=tem[i];
sp=i;
}
}
return sp-1;
}
int dfs()
{
int x[2];
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
{
if(j==i)
continue;
for(int k=0;k<5;k++)
{
if(k==i||k==j)
continue;
for(int p=0;p<5;p++)
{
if(p==i||p==j||p==k)
continue;
for(int q=0;q<5;q++)
{
if(q==p||q==j||q==k||q==i)
continue;
tem[0]=cd[i];
tem[1]=cd[j];
tem[2]=cd[k];
tem[3]=cd[p];
tem[4]=cd[q];
int n=getsp();
int b=0;
for(int i=2;i<5;i++)
if(i!=n+1)
{
x[b++]=tem[i];
}
if(x[0]>x[1])
n+=3;
b=((tem[1]+4*n)%52)/4;
int c=tem[0]/4;
if(b==c)
return 1;
}
}
}
}
return 0;
}
int main()
{
int t;
cin>>t;
for(int time=1;time<=t;time++)
{
for(int i=0;i<5;i++)
{
cin>>w;
int n;
if(w[1]=='0')
n=10;
else if(w[0]=='A')
n=1;
else if(w[0]=='J')
n=11;
else if(w[0]=='Q')
n=12;
else if(w[0]=='K')
n=13;
else
n=w[0]-'0';
n*=4;
int p=1;
if(w[1]=='0')
p=2;
if(w[p]=='C')
n+=0;
else if(w[p]=='D')
n+=1;
else if(w[p]=='H')
n+=2;
else if(w[p]=='S')
n+=3;
cd[i]=n;
}
while(true)
{
int flag=dfs();
if(flag==1)
break;
}
cout<<"Problem "<<time<<": ";
for(int i=0;i<5;i++)
{
switch(tem[i]/4)
{
case 1:cout<<"A";break;
case 10:cout<<"10";break;
case 11:cout<<"J";break;
case 12:cout<<"Q";break;
case 13:cout<<"K";break;
default:char s=tem[i]/4+'0';
cout<<s;
}
switch(tem[i]%4)
{
case 0:cout<<"C";break;
case 1:cout<<"D";break;
case 2:cout<<"H";break;
case 3:cout<<"S";
}
cout<<" ";
}
cout<<endl;
}
}