252行代码结果70pts
查看原帖
252行代码结果70pts
517637
瀛洲仙子楼主2023/10/6 21:07
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
int to_d(string s)
{
    int d=0;
    for(int i=0;i<s.length();++i)
        d=d*10+s[i]-48;
    return d;
}
struct var
{
    int num;
    char color;
    var(){}
    var(string s)
    {
        this->color=s[0];
        s.erase(s.begin());
        this->num=to_d(s);
    }
};
map<var,int>score;
var p1[55],p2[55],p3[55],p4[55];
int a,b,c,d;
bool operator==(var a,var b)
    {return a.color==b.color and a.num==b.num;}
bool operator<(var a,var b)
{
    if(a.color==b.color)return a.num<b.num;
    else return a.color<b.color;
}
char Hat1()
{
    int res=0;
    if(a>=13)
    {
        bool res=(find(p1+1,p1+a+1,var("H1")) and
                  find(p1+1,p1+a+1,var("H2")) and
                  find(p1+1,p1+a+1,var("H3")) and
                  find(p1+1,p1+a+1,var("H4")) and
                  find(p1+1,p1+a+1,var("H5")) and
                  find(p1+1,p1+a+1,var("H6")) and
                  find(p1+1,p1+a+1,var("H7")) and
                  find(p1+1,p1+a+1,var("H8")) and
                  find(p1+1,p1+a+1,var("H9")) and
                  find(p1+1,p1+a+1,var("H10")) and
                  find(p1+1,p1+a+1,var("H11")) and
                  find(p1+1,p1+a+1,var("H12")) and
                  find(p1+1,p1+a+1,var("H13"))
        );
        if(res)return 'a';
    }
    if(b>=13)
    {
        bool res=(find(p2+1,p2+b+1,var("H1")) and
                  find(p2+1,p2+b+1,var("H2")) and
                  find(p2+1,p2+b+1,var("H3")) and
                  find(p2+1,p2+b+1,var("H4")) and
                  find(p2+1,p2+b+1,var("H5")) and
                  find(p2+1,p2+b+1,var("H6")) and
                  find(p2+1,p2+b+1,var("H7")) and
                  find(p2+1,p2+b+1,var("H8")) and
                  find(p2+1,p2+b+1,var("H9")) and
                  find(p2+1,p2+b+1,var("H10")) and
                  find(p2+1,p2+b+1,var("H11")) and
                  find(p2+1,p2+b+1,var("H12")) and
                  find(p2+1,p2+b+1,var("H13"))
        );
        if(res)return 'b';
    }
    if(c>=13)
    {
        bool res=(find(p3+1,p3+c+1,var("H1")) and
                  find(p3+1,p3+c+1,var("H2")) and
                  find(p3+1,p3+c+1,var("H3")) and
                  find(p3+1,p3+c+1,var("H4")) and
                  find(p3+1,p3+c+1,var("H5")) and
                  find(p3+1,p3+c+1,var("H6")) and
                  find(p3+1,p3+c+1,var("H7")) and
                  find(p3+1,p3+c+1,var("H8")) and
                  find(p3+1,p3+c+1,var("H9")) and
                  find(p3+1,p3+c+1,var("H10")) and
                  find(p3+1,p3+c+1,var("H11")) and
                  find(p3+1,p3+c+1,var("H12")) and
                  find(p3+1,p3+c+1,var("H13"))
        );
        if(res)return 'c';
    }
    if(d>=13)
    {
        bool res=(find(p4+1,p4+d+1,var("H1")) and
                  find(p4+1,p4+d+1,var("H2")) and
                  find(p4+1,p4+d+1,var("H3")) and
                  find(p4+1,p4+d+1,var("H4")) and
                  find(p4+1,p4+d+1,var("H5")) and
                  find(p4+1,p4+d+1,var("H6")) and
                  find(p4+1,p4+d+1,var("H7")) and
                  find(p4+1,p4+d+1,var("H8")) and
                  find(p4+1,p4+d+1,var("H9")) and
                  find(p4+1,p4+d+1,var("H10")) and
                  find(p4+1,p4+d+1,var("H11")) and
                  find(p4+1,p4+d+1,var("H12")) and
                  find(p4+1,p4+d+1,var("H13"))
        );
        if(res)return 'd';
    }
    return 0;
}
char place(string s)
{
    if(find(p1+1,p1+a+1,var(s))!=p1+a+1)
        return 'a';
    if(find(p2+1,p2+b+1,var(s))!=p2+b+1)
        return 'b';
    if(find(p3+1,p3+c+1,var(s))!=p3+c+1)
        return 'c';
    if(find(p4+1,p4+d+1,var(s))!=p4+d+1)
        return 'd';
    return 0;
}
void print(int x)
{
    if(x>0)cout<<'+';
    cout<<x<<' ';
}
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    while(true)
    {
        cin>>a;
        for(int i=1;i<=a;++i)
        {string s;cin>>s;p1[i]=var(s);}
        cin>>b;
        for(int i=1;i<=b;++i)
        {string s;cin>>s;p2[i]=var(s);}
        cin>>c;
        for(int i=1;i<=c;++i)
        {string s;cin>>s;p3[i]=var(s);}
        cin>>d;
        for(int i=1;i<=d;++i)
        {string s;cin>>s;p4[i]=var(s);}
        if(!a and !b and !c and !d)
            return 0;
        char hpower=Hat1();
        char C10=place("C10");
        char S12=place("S12");
        char D11=place("D11");
        int pa=0,pb=0,pc=0,pd=0;
        score[var("S12")]=-100;
        score[var("D11")]=100;
        if(!hpower)
        {
            score[var("H1")]=-50;
            score[var("H2")]=-2;
            score[var("H3")]=-3;
            score[var("H4")]=-4;
            score[var("H5")]=-5;
            score[var("H6")]=-6;
            score[var("H7")]=-7;
            score[var("H8")]=-8;
            score[var("H9")]=-9;
            score[var("H10")]=-10;
            score[var("H11")]=-20;
            score[var("H12")]=-30;
            score[var("H13")]=-40;
            for(int i=1;i<=a;++i)
                pa+=score[p1[i]];
            for(int i=1;i<=b;++i)
                pb+=score[p2[i]];
            for(int i=1;i<=c;++i)
                pc+=score[p3[i]];
            for(int i=1;i<=d;++i)
                pd+=score[p4[i]];
        }
        if(hpower=='a')
        {
                pa=200;
                if(S12==hpower and hpower==D11)
                    pa=500;
            for(int i=1;i<=b;++i)
                pb+=score[p2[i]];
            for(int i=1;i<=c;++i)
                pc+=score[p3[i]];
            for(int i=1;i<=d;++i)
                pd+=score[p4[i]];
        }
        else if(hpower=='b')
        {
                pb=200;
                if(S12==hpower and hpower==D11)
                    pb=500;
            for(int i=1;i<=a;++i)
                pa+=score[p1[i]];
            for(int i=1;i<=c;++i)
                pc+=score[p3[i]];
            for(int i=1;i<=d;++i)
                pd+=score[p4[i]];
        }
        else if(hpower=='c')
        {
                pc=200;
                if(S12==hpower and hpower==D11)
                    pc=500;
            for(int i=1;i<=a;++i)
                pa+=score[p1[i]];
            for(int i=1;i<=b;++i)
                pb+=score[p2[i]];
            for(int i=1;i<=d;++i)
                pd+=score[p4[i]];
        }
        else if(hpower=='d')
        {
                pd=200;
                if(S12==hpower and hpower==D11)
                    pd=500;
            for(int i=1;i<=a;++i)
                pa+=score[p1[i]];
            for(int i=1;i<=b;++i)
                pb+=score[p2[i]];
            for(int i=1;i<=c;++i)
                pc+=score[p3[i]];
        }
        if(C10=='a')
        {
            if(a==1)pa=50;
            else pa*=2;
        }
        if(C10=='b')
        {
            if(b==1)pb=50;
            else pb*=2;
        }
        if(C10=='c')
        {
            if(c==1)pc=50;
            else pc*=2;
        }
        if(C10=='d')
        {
            if(d==1)pd=50;
            else pd*=2;
        }
        print(pa);print(pb);print(pc);print(pd);
        cout<<endl;
    }
    fclose(stdin);fclose(stdout);
}
2023/10/6 21:07
加载中...