Wannafly Camp 2020 Day 6M 自闭

按题意模拟,又乱又烦,没什么可说的

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m,w,x[5005],y[5005],c[5005];
int ac[15];
signed main() {
    cin>>n>>m>>w;
    for(int i=1;i<=w;i++) cin>>x[i]>>y[i]>>c[i];
    for(int i=1;i<=m;i++) {
        int b[105]={};
        for(int j=1;j<=w;j++) {
            if(c[j] && y[j]==i) b[x[j]]=1;
        }
        for(int j=1;j<=n;j++) if(b[j]) ++ac[i];
    }
    for(int i=1;i<=n;i++) {
        int cntSubmit=0, cntAc=0, flagAc[15]={};
        for(int j=1;j<=w;j++) {
            if(x[j]==i) ++cntSubmit;
            if(x[j]==i && c[j]) ++cntAc, flagAc[y[j]]=1;
        }
        int flag=1;
        for(int j=1;j<=m;j++) if(flagAc[j]==0) flag=0;
        if(cntSubmit==0) cout<<998244353<<endl;
        else if(cntAc==0) cout<<1000000<<endl;
        else if(flag) cout<<0<<endl;
        else {
            int ans = 0;
            for(int j=1;j<=m;j++) if(!flagAc[j] && ac[j]) ans+=20;
            for(int j=1;j<=m;j++) if(!flagAc[j] && ac[j]>=n/2) ans+=10;
            for(int j=1;j<=m;j++) {
                int mx=0,sum=0,fg=0;
                for(int k=1;k<=w;k++) {
                    if(x[k]==i && y[k]==j) {
                        if(c[k]) {
                            fg=1;
                            sum=0;
                        }
                        else {
                            ++sum;
                            mx=max(mx,sum);
                        }
                    }
                }
                ans+=(2-fg)*mx*mx;
            }
            cout<<ans<<endl;
        }
    }
}
原文地址:https://www.cnblogs.com/mollnn/p/12274551.html