90pts求助
查看原帖
90pts求助
569437
SunburstFan楼主2024/3/6 20:23

最后两个WA了,提交记录里面从来没出现过类似的情况

求助呜呜呜呜

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define int long long
using namespace std;

const int N=2e5+5;

struct card{
    int col,val;
    void scan(){
        col=val=0;
        string str;
        cin>>str;
        col=4-(str[0]-'a');
        if(str[1]=='A'){val=1;return;}
        for(int i=1;i<str.length();i++)
            val=val*10+str[i]-'0';
    }
};
struct player{
    string name;
    card c[6];
    int pts,w;
    int bomb_val;
    bool tb;
    card maxn(){
        int num,mx=0,mxc;
        for(int i=1;i<=5;i++)
            if(mx<c[i].val){
                mx=c[i].val;
                num=i;
                mxc=c[i].col;
            }
            else if(mx==c[i].val&&c[i].col>mxc){
                mxc=c[i].col;
                num=i;
            }
        return c[num];
    }
};
unordered_map<string,int> mp;
string name[N];

int id,t,n;
player a[20];

void init(){
    for(int i=1;i<=3;i++)
        a[i].tb=a[i].pts=0;
}
void input(){
    for(int i=1;i<=3;i++){
        cin>>a[i].name;
        for(int j=1;j<=5;j++)
            a[i].c[j].scan();
    }
}

int bomb(player x){
    int v[10];
    for(int i=1;i<=5;i++)v[i]=x.c[i].val;
    sort(v+1,v+1+5);
    if(v[1]==v[2]&&v[2]==v[3]&&v[3]==v[4])return v[1];
    if(v[2]==v[3]&&v[3]==v[4]&&v[4]==v[5])return v[2];
    return 0;
}

int cow(int x){
    int v[10],sum=0,ret1=0,ret2=0;
    for(int i=1;i<=5;i++){v[i]=a[x].c[i].val;sum+=v[i];}
    sort(v+1,v+1+5);

    if(v[1]==v[2]&&v[2]==v[3])if((v[4]+v[5])%10==0){a[x].tb=1;return 10;}
    if(v[2]==v[3]&&v[3]==v[4])if((v[1]+v[5])%10==0){a[x].tb=1;return 10;}
    if(v[3]==v[4]&&v[4]==v[5])if((v[1]+v[2])%10==0){a[x].tb=1;return 10;}

    for(int i=1;i<=5;i++)
        for(int j=1;j<=5;j++){
            if(i==j)continue;
            if((sum-v[i]-v[j])%10==0&&(v[i]+v[j])%10==0)return 10;
        }
            

    if(v[1]==v[2]&&v[2]==v[3])ret1=max((v[4]+v[5])%10,ret1);
    if(v[2]==v[3]&&v[3]==v[4])ret1=max((v[1]+v[5])%10,ret1);
    if(v[3]==v[4]&&v[4]==v[5])ret1=max((v[1]+v[2])%10,ret1);

    for(int i=1;i<=5;i++)
        for(int j=1;j<=5;j++){
            if(i==j)continue;
            if((sum-v[i]-v[j])%10==0)
                ret2=max((v[i]+v[j])%10,ret2);
        }

    if(ret1==ret2&&ret1==0)return 0;
    if(ret1>=ret2){a[x].tb=1;return ret1;}
    return ret2;
}

void recog(){
    for(int i=1;i<=3;i++){
        if(bomb(a[i])){
            a[i].w=11;
            a[i].bomb_val=bomb(a[i]);
        }
        else a[i].w=cow(i);
    }
}

bool cmp(player x,player y){
    if(x.w!=y.w)return x.w>y.w;
    if(x.w==11)return x.bomb_val>y.bomb_val;
    if(x.tb!=y.tb)return x.tb>y.tb;
    card mx=x.maxn(),my=y.maxn(); 
    
    if(mx.val!=my.val)return mx.val>my.val;
    return mx.col>my.col;
    
}
void solve(){

    //cout<<cow(1)<<" "<<cow(2)<<endl;


    for(int i=1;i<=3;i++)
        for(int j=i+1;j<=3;j++)
        {
            if(cmp(a[i],a[j])){
                int sum=10;
                if(a[i].tb)sum*=2;
                if(a[i].w==11)sum*=10;
                if(a[i].w==10)sum*=3;
                if(a[i].w>=7&&a[i].w<=9)sum*=2;
                a[i].pts+=sum;
                a[j].pts-=sum;
            }
            else{
                int sum=10;
                if(a[j].tb)sum*=2;
                if(a[j].w==11)sum*=10;
                if(a[j].w==10)sum*=3;
                if(a[j].w>=7&&a[j].w<=9)sum*=2;
                a[j].pts+=sum;
                a[i].pts-=sum;
            }
        }
            
}

void calc(){

    //cout<<a[1].pts<<" "<<a[2].pts<<" "<<a[3].pts<<endl;

    for(int i=1;i<=3;i++)
        mp[a[i].name]+=a[i].pts;
}

void output(){
    for(int i=1;i<=n;i++)
        cout<<name[i]<<" "<<mp[name[i]]<<endl;
}

signed main(){
    
    scanf("%lld%lld%lld",&id,&t,&n);
    for(int i=1;i<=n;i++){
        cin>>name[i];
        mp[name[i]]=0;
    }

    while(t--){
        init();
        input();
        recog();
        solve();
        calc();
    }

    output();

    return 0;
}
2024/3/6 20:23
加载中...