| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
不那么有趣!Source Code
Problem: 3966 User: JiaJunpeng
Memory: 160K Time: 172MS
Language: C++ Result: Accepted
Source Code
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stdio.h>
using namespace std;
int len,cnt,num[17],ans,cont,num1[17];
struct pai
{
int rank;
char suit;
bool operator <(const pai &temp)const
{
return rank<temp.rank;
}
};
struct pp
{
pai a[10];
};
pp nw,now;
char str[100];
int level(pp nw,int num[])
{
int i,j,s,p,q,res;
if(num[nw.a[4].rank]==4)
return 7;
if(num[nw.a[4].rank]==3&&num[nw.a[1].rank]==2)
return 6;
for(i=1;i<5;i++)
{
if(nw.a[i].suit!=nw.a[i-1].suit)
break;
}
if(i>=5)
{
for(i=1;i<5;i++)
{
if(nw.a[i].rank!=nw.a[i-1].rank+1)
break;
}
if(i>=5)
return 8;
return 5;
}
for(i=1;i<5;i++)
{
if(nw.a[i].rank!=nw.a[i-1].rank+1)
break;
}
if(i>=5)
return 4;
if(num[nw.a[4].rank]==3)
return 3;
if(num[nw.a[4].rank]==2&&num[nw.a[2].rank]==2)
return 2;
if(num[nw.a[4].rank]==2)
return 1;
return 0;
}
int compare(pp nw1,pp nw2)
{
int i,v1=level(nw1,num1),v2=level(nw2,num);
if(v1<v2)
return -1;
if(v1>v2)
return 1;
for(i=4;i>=0;i--)
{
if(nw1.a[i].rank<nw2.a[i].rank)
return -1;
else if(nw1.a[i].rank>nw2.a[i].rank)
return 1;
}
return 0;
}
void xu(pp &nw,int num[])
{
int i,j;
if(nw.a[0].rank==2&&nw.a[1].rank==3&&nw.a[2].rank==4&&nw.a[3].rank==5&&nw.a[4].rank==14)
{
swap(nw.a[0],nw.a[4]);
swap(nw.a[3],nw.a[4]);
swap(nw.a[2],nw.a[3]);
swap(nw.a[1],nw.a[2]);
nw.a[0].rank=1;
}
for(i=0;i<5;i++)
{
num[nw.a[i].rank]=0;
for(j=0;j<5;j++)
{
if(nw.a[i].rank==nw.a[j].rank)
num[nw.a[i].rank]++;
}
}
for(i=0;i<5;i++)
for(j=i+1;j<5;j++)
{
if((num[nw.a[i].rank]>num[nw.a[j].rank])||(num[nw.a[i].rank]==num[nw.a[j].rank]&&nw.a[i].rank>nw.a[j].rank))
swap(nw.a[i],nw.a[j]);
}
}
int main()
{
int i,j,lv1,lv2,lv3;
int a[5];
while(gets(str))
{
len=strlen(str);
cnt=0;
for(i=0;i<len;i++)
{
if(str[i]<='9'&&str[i]>='0')
nw.a[cnt].rank=str[i]-'0';
else if(str[i]=='C'||str[i]=='D'||str[i]=='H'||str[i]=='S')
nw.a[cnt++].suit=str[i];
else if(str[i]=='A')
nw.a[cnt].rank=14;
else if(str[i]=='K')
nw.a[cnt].rank=13;
else if(str[i]=='Q')
nw.a[cnt].rank=12;
else if(str[i]=='J')
nw.a[cnt].rank=11;
else if(str[i]=='T')
nw.a[cnt].rank=10;
}
sort(nw.a,nw.a+5);
xu(nw,num);
ans=0;
cont=0;
for(a[0]=2;a[0]<=14;a[0]++)
for(a[1]=a[0];a[1]<=14;a[1]++)
for(a[2]=a[1];a[2]<=14;a[2]++)
for(a[3]=a[2];a[3]<=14;a[3]++)
for(a[4]=a[3];a[4]<=14;a[4]++)
{
for(i=0;i<5;i++)
{
now.a[i].rank=a[i];
now.a[i].suit='C';
}
xu(now,num1);
if(num1[now.a[4].rank]==5)
continue;
if(num1[now.a[4].rank]==1)
{
lv2=level(now,num1);
if(compare(now,nw)<0)
ans++;
}
else
lv2=-1;
now.a[4].suit='S';
lv3=level(now,num1);
if(lv2!=lv3)
{
if(compare(now,nw)<0)
ans++;
}
}
ans++;
printf("%d\n",ans);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator