90分求调
查看原帖
90分求调
1023189
wangtairan114楼主2024/1/6 16:20

记录 代码如下:

#include <cstring>
#include <string>
#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <stack>
#include <queue>
#include <limits.h>
#include <list>
#include <set>
#include <map>
using namespace std;
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)
#define INF 0x3f3f3f3f
#define f1(tp,l,i,j,k) for(tp l=i;l<=j;l+=k)
#define f2(tp,l,i,j,k) for(tp l=i;l>=j;l-=k)
#define vc(tp,nm) vector<tp> nm;
#define pqg(tp,nm) priority_queue<tp,vector<tp>,greater<tp>> nm;
#define ll long long
#define pql(tp,nm) priority_queue<tp> nm;
#define qq(tp,nm) queue<tp> nm;
#define dq(tp,nm) deque<tp> nm;
#define sc scanf
#define pr printf
#define v1 first
#define v2 second
#define scl(nm) scanf("%lld",&nm)
#define sci(nm) scanf("%d",&nm)
#define prn printf("\n")
#define prl(nm) printf("%lld",nm)
#define pri(nm) printf("%d",nm)
#define prc(nm) printf("%c",nm)
#define clearq(nm,tp) queue<tp> emp;swap(nm,emp);
#define clearpair(nm,f,s) queue<pair<f,s>> emp;swap(nm,emp);
string ssss,sssss;
ll SUM,I,aaaa,Ii,recoff1;
#define sfxto10(x,nm,nm2) ssss=nm;SUM=0;I=1;while(!ssss.empty()){SUM+=int(ssss[ssss.size()-1]-'0')*I; I*=x;ssss.erase(ssss.size()-1,1);}nm2=SUM;
#define sf10tox(x,nm,nm2) aaaa=stol(nm);Ii=1; sssss="";while(Ii*x<=aaaa)Ii*=x; while(aaaa>0){if(Ii<=aaaa){recoff1=aaaa/Ii;aaaa%=Ii;sssss+=char(recoff1+'0');}else{sssss+="0";}Ii/=x;}while(Ii>0){sssss+="0";Ii/=x;}nm2=stol(sssss);
#define fxto10(x,nm,nm2) ssss=to_string(nm);SUM=0;I=1;while(!ssss.empty()){SUM+=int(ssss[ssss.size()-1]-'0')*I; I*=x;ssss.erase(ssss.size()-1,1);}nm2=SUM;
#define f10tox(x,nm,nm2) aaaa=nm;Ii=1; sssss="";while(Ii*x<=aaaa)Ii*=x; while(aaaa>0){if(Ii<=aaaa){recoff1=aaaa/Ii;aaaa%=Ii;sssss+=char(recoff1+'0');}else{sssss+="0";}Ii/=x;}while(Ii>0){sssss+="0";Ii/=x;}nm2=stol(sssss);
//using namespace std;
string rtsans;
#define str string
#define srn(nm1) nm1=rtsans;
#define stransup(nm1)  transform(nm1.begin(), nm1.end(), back_inserter(rtsans), ::toupper);srn(nm1);
#define stransdown(nm1)  transform(nm1.begin(), nm1.end(), back_inserter(rtsans), ::tolower);srn(nm1);
char rtans;
#define small(nm1) nm1>='a'&&nm1<='z'//used with "if"
#define nsmall(nm1) nm1<'a'||nm1>'z'//used with "if"
#define big(nm1) nm1>='A'&&nm1<='Z'//used with "if"
#define nbig(nm1) nm1<'A'||nm1>'Z'//used with "if"
#define isnum(nm1) nm1>='0'&&nm1<='9'//used with "if"
#define crn(nm1) nm1=rtans;
#define ctransup(nm1) if(small(nm1)){nm1=nm1-32;}
#define ctransdown(nm1) if(big(nm1)){nm1=nm1+32;}
#define bktsdown(nm1)nm1=nm1-26;
#define bktsup(nm1)nm1=nm1+26;
#define move(nm1,nm2) bool ok=0; if(small(nm1))ok=1;rtans=char(int(nm1)+nm2);crn(nm1);if(ok){if(nsmall(nm1)){if(nm2>0){while(nsmall(nm1))bktsdown(nm1);}else {while(nsmall(nm1))bktsup(nm1);}}}else{if(nbig(nm1)){if(nm2>0){while(nbig(nm1))bktsdown(nm1);}else{while(nbig(nm1))bktsup(nm1);}}}
//to_string() 将数字转为字符串
//stoi() 将字符串转为数字
//reverse(s.begin(),s.end()) 倒置字符串
//__gcd() 最小公倍数(不能使用)
//string::npos string类型的最大值
//n>>2相当于n/2
//n<<2相当于n*2
//0|1=1 1|0=1 1|1=1 0|0=0
//0&1=0 1&0=0 1&1=1 0|0=0
//while(scanf("%lld",&n)!=EOF)循环输入
ll a[5],ans[5],b[5][60];
vector<string> v[5];
ll res[20]={0ll,-50ll,-2ll,-3ll,-4ll,-5ll,-6ll,-7ll,-8ll,-9ll,-10ll,-20ll,-30ll,-40ll,-100ll,100ll,0ll};
ll change(string s)
{
    if(s[0]=='H')
    {
        if(s.size()==2)
        {
            return (ll)(s[1]-'0');
        }
        else
        {
            if(s[1]>'1'||s[2]>'3')
                return INF;
            ll res=(ll)(s[1]-'0');
            res=res*10+(ll)(s[2]-'0');
            return res;
        }
    }
    if(s=="S12")
    {
        return 14ll;
    }
    if(s=="D11")
    {
        return 15ll;
    }
    if(s=="C10")
    {
        return 16ll;
    }
    return INF;
}
bool check1()
{
    ll sum=0;
    for(ll i=1; i <= 4; i++)
    {
        if(!v[i].empty())
        {
            for(ll j=0; j < v[i].size(); j++)
            {
                sum+=(change(v[i][j])!=INF?change(v[i][j]):0);
            }
        }
    }
    if(sum==136)
        return 1;
    return 0;
}
ll allred()
{
    ll ans=0;
    for(ll i=1; i <= 4; i++)
    {
        if(!v[i].empty())
        {
            for(ll j=0; j <v[i].size(); j++)
            {
                b[i][j+1]=change(v[i][j]);
            }
            for(ll j=1; j <v[i].size(); j++)
            {
                for(ll k=j+1; k <= v[i].size(); k++)
                {
                    if(b[i][j]>b[i][k])
                    {
                        swap(b[i][j],b[i][k]);
                    }
                }
            }
            if(v[i].size()>=13)
            {
                if(b[i][13]==13)
                {
                    ans=i;
                }
            }
        }
    }
    return ans;
}
ll cal(ll k,ll red)
{
//    cout << k << " "<< red << endl;
    if(k==red)
    {
        if(v[k].size()>=15)
        {
            if(b[k][15]==15)
            {
                if(v[k].size()>=16)
                {
                    if(b[k][16]==16)
                    {
                        return 1000ll;
                    }
                    return 500ll;
                }
                return 500ll;
            }
        }
        if(v[k].size()>=14)
        {
            if(b[k][14]==14)
            {
                if(v[k].size()>=15)
                {
                    if(b[k][15]==16)
                    {
                        return 200ll;
                    }
                    return 100ll;
                }
                return 100ll;
            }
            if(b[k][14]==15)
            {
                if(v[k].size()>=15)
                {
                    if(b[k][15]==16)
                    {
                        return 600ll;
                    }
                    return 300ll;
                }
                return 300ll;
            }
            if(b[k][14]==16)
            {
                return 400ll;
            }
        }
        return 200ll;
    }
    else
    {
        ll sum=0;
        for(ll i=1; i <= v[k].size(); i++)
        {
            if(b[k][i]<16)
            {
                sum+=res[b[k][i]];
            }
            else
            {
                if(b[k][i]==16)
                {
                    if(i==1)
                    {
                        return 50ll;
                    }
                    else
                    {
                        return sum*2;
                    }
                }
                return sum;
            }
        }
        return sum;
    }
    return 0ll;
}
int main()
{
    v[1].resize(0);
    while(true)
    {
        for(ll i=1; i <= 4; i++)
        {
            v[i].resize(0);
        }
        //读入
        for(ll i=1; i <= 4; i++)
        {
            sc("%lld",&a[i]);
            for(ll j=1; j <= a[i]; j++)
            {
                string b;
                cin >> b;
                v[i].push_back(b);
            }
        }
        if(a[1]==0&&a[2]==0&&a[3]==0&&a[4]==0)
        {
            break;
        }
        if(!check1())
        {
            pr("0 0 0 0\n");
            continue;
        }
        ll ok;
        memset(b,INF,sizeof(b));
        ok=allred();
        memset(ans,0,sizeof(ans));
        for(ll i=1; i <= 4; i++)
        {
            ans[i]=cal(i,ok);
        }
        for(ll i=1; i <= 4; i++)
        {
            if(ans[i]>0)
            {
                pr("+%lld ",ans[i]);
            }
            else
            {
                pr("%lld ",ans[i]);
            }
        }
        prn;
    }
    return 0;
}
2024/1/6 16:20
加载中...