数据可能还要加强一下。
查看原帖
数据可能还要加强一下。
227436
年华天地楼主2020/10/4 10:59

贪心还是能水过。

#include<cstdio>
using namespace std;
int n,m,k,f,fa[10000],book[300],cnt[3000],mapp[300],ans,ma[300];
int minn=1e9,mi=1e9,ans1,s[100][100];
char a[100][100];
int main()
{
    scanf("%d%d",&n,&k);
    for (int i=0;i<n;++i)
        scanf("%s",a[i]);
    for (int i=0;i<n;++i)
        for (int j=0;j<n;j++)
            if (a[i][j]=='Y')s[i+1][j+1]=1;
    for (int i=1;i<=n;++i)
        for (int j=1;j<=n;++j)
            if (s[i][j]==1)
                cnt[i]++,book[j]++;
    for (int i=1;i<=n;++i){
        if (cnt[i]<minn)minn=cnt[i],ans=1;
        if (minn==cnt[i])ans++;
    }
    for (int i=1;i<=n;++i){
        if (book[i]<mi)mi=book[i],ans1=1;
        if (mi==book[i])ans1++;
    }
    if (minn==1&&ans>0&&k==0){printf("0");return 0;}
    for (int i=1;i<=n;++i)
        if (cnt[i]==minn)
            for (int j=1;j<=n;++j)
                if (s[i][j]==1){
                    mapp[j]++;
                    if (mapp[j]>ans){
                        printf("0");
                        return 0;
                    }
                }
    for (int i=1;i<=n;i++)
        if (book[i]==mi)
            for (int j=1;j<=n;j++)
                if (s[j][i]==1){
                    ma[j]++;
                    if (ma[j]>ans1){
                        printf("0");
                        return 0;
                    }
                }
    minn=(minn+k)<n?(minn+k):n;
    mi=(mi+k)<n?(mi+k):n;
    minn=mi<minn?mi:minn;
    printf("%d",minn);
    return 0;
}
2020/10/4 10:59
加载中...