Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

是非常恶心!!!

Posted by dut200901102 at 2011-08-09 21:08:18 on Problem 3966
Source Code

Problem: 3966  User: dut200901102 
Memory: 168K  Time: 47MS 
Language: C++  Result: Accepted 

Source Code 
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>

using namespace std;

struct node{int t;char c;}p[5];

int get_num(char st)
{
    if(st=='T')return 10;
    if(st=='J')return 11;
    if(st=='Q')return 12;
    if(st=='K')return 13;
    if(st=='A')return 14;
    return st-'0';
}
bool operator < (const node &x,const node &y)
{
    return x.t<y.t;
}
void init()
{
    char st[3];
    for(int i=0;i<5;++i)
    {
        scanf("%s",st);
        p[i].c=st[1],p[i].t=get_num(st[0]);
    }
    sort(p,p+5);
//    for(int i=0;i<5;++i)cout<<p[i].t<<" ";cout<<endl;
//    for(int i=0;i<5;++i)cout<<p[i].c<<" ";cout<<endl;
}
bool Straight(int &top)
{
    if(p[0].t==2&&p[1].t==3&&p[2].t==4&&p[3].t==5&&p[4].t==14){top=5;return true;}
    for(int i=1;i<5;++i)
    if(p[i].t!=p[i-1].t+1)return false;
    top=p[4].t;
    return true;
}
bool Flush()
{
    for(int i=1;i<5;++i)
    if(p[i].c!=p[i-1].c)return false;
    return true;
}
bool Straight_Flush(int &top)
{
    return (Straight(top)&&Flush());
}
bool Four_of_a_Kind(int &top,int &top1)
{
    if(p[0].t==p[3].t){top=p[0].t,top1=p[4].t;return true;}
    if(p[1].t==p[4].t){top=p[1].t,top1=p[0].t;return true;}
    return false;
}
bool Full_House(int &top,int &top1)
{
    if(p[0].t==p[2].t&&p[3].t==p[4].t){top=p[0].t,top1=p[4].t;return true;}
    if(p[2].t==p[4].t&&p[0].t==p[1].t){top=p[2].t,top1=p[0].t;return true;}
    return false;
}
bool Three_of_a_Kind(int &top,int &top1,int &top2)
{
    if(p[0].t==p[2].t){top=p[0].t,top1=p[4].t,top2=p[3].t;return true;}
    if(p[1].t==p[3].t){top=p[1].t,top1=p[4].t,top2=p[0].t;return true;}
    if(p[2].t==p[4].t){top=p[2].t,top1=p[1].t,top2=p[0].t;return true;}
    return false;
}
bool Two_Pairs(int &top,int &top1,int &top2)
{
    if(p[0].t==p[1].t&&p[2].t==p[3].t){top=p[2].t,top1=p[0].t,top2=p[4].t;return true;}
    if(p[0].t==p[1].t&&p[3].t==p[4].t){top=p[3].t,top1=p[0].t,top2=p[2].t;return true;}
    if(p[1].t==p[2].t&&p[3].t==p[4].t){top=p[3].t,top1=p[1].t,top2=p[0].t;return true;}
    return false;
}
bool One_Pair(int &top,int &top1,int &top2,int &top3)
{
    if(p[0].t==p[1].t){top=p[0].t,top1=p[4].t,top2=p[3].t,top3=p[2].t;return true;}
    if(p[1].t==p[2].t){top=p[1].t,top1=p[4].t,top2=p[3].t,top3=p[0].t;return true;}
    if(p[2].t==p[3].t){top=p[2].t,top1=p[4].t,top2=p[1].t,top3=p[0].t;return true;}
    if(p[3].t==p[4].t){top=p[3].t,top1=p[2].t,top2=p[1].t,top3=p[0].t;return true;}
    return false;
}
int get_rank_common()
{
    int cnt=1;
    for(int i1=2;i1<=14;++i1)
    for(int i2=2;i2<i1;++i2)
    for(int i3=2;i3<i2;++i3)
    for(int i4=2;i4<i3;++i4)
    for(int i5=2;i5<i4;++i5)
    {
        if(i5+1==i4&&i4+1==i3&&i3+1==i2&&i2+1==i1)continue;
        if(i1==14&&i2==5&&i3==4&&i4==3&&i5==2)continue;
        if(i1==p[4].t&&i2==p[3].t&&i3==p[2].t&&i4==p[1].t&&i5==p[0].t)return cnt;
        cnt++;
    }
}
int get_rank_3K(int top,int top1,int top2)
{
    int cnt=1;
    for(int u=2;u<=14;++u)
    for(int i=2;i<=14;++i)
    if(i!=u)
    for(int j=2;j<i;++j)
    if(j!=u)
    {
        if(j==top2&&i==top1&&u==top)return cnt;
        cnt++;
    }
}
int get_rank_2P(int top,int top1,int top2)
{
    int cnt=1;
    for(int i=2;i<=14;++i)
    for(int j=2;j<i;++j)
    for(int k=2;k<=14;++k)
    {
        if(k==i||k==j)continue;
        if(i==top&&j==top1&&k==top2)return cnt;
        cnt++;
    }
}
int get_rank_1P(int top,int top1,int top2,int top3)
{
    int cnt=1;
    for(int u=2;u<=14;++u)
        for(int i=2;i<=14;++i)
        if(i!=u)
        for(int j=2;j<i;++j)
        if(j!=u)
        for(int k=2;k<j;++k)
        if(k!=u)
        {
            if(top==u&&top3==k&&top2==j&&top1==i)return cnt;
            cnt++;
        }
}
int solve()
{
    int top,top1,top2,top3;
    if(Straight_Flush(top))
        return 7452+top-4;
    if(Four_of_a_Kind(top,top1))
        return 7296+(top-2)*12+top1-1-(top1>top);
    if(Full_House(top,top1))
        return 7140+(top-2)*12+top1-1-(top1>top);
    if(Flush())
        return 5863+get_rank_common();
    if(Straight(top))
        return 5853+top-4;
    if(Three_of_a_Kind(top,top1,top2))
        return 4995+get_rank_3K(top,top1,top2);
    if(Two_Pairs(top,top1,top2))
        return 4137+get_rank_2P(top,top1,top2);
    if(One_Pair(top,top1,top2,top3))
        return 1277+get_rank_1P(top,top1,top2,top3);
    return get_rank_common();
}
int main()
{
//    freopen("in.txt","r",stdin);
    init();
    printf("%d\n",solve());
    return 0;
}


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator