Codeforces Round #654 (Div. 2) D

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
int mp[410][410];
void solve()
{
    memset(mp,0,sizeof  mp);
    int n,num;
    cin>>n>>num;
    if(num)
        for(int k=0; k<=n-1; k++)
        {
            int j=1+k;
            for(int i=1; i<=n; i++)
            {
                mp[i][j]=1;
                j++;
                num--;
                if(num==0)
                    break;
                if(j==n+1)
                    j=1;
            }
            if(num==0)
                break;
        }
    int ans=0;
    int minv=n+1;
    int maxv=-1;
    for(int i=1; i<=n; i++)
    {
        int ans1=0;
        for(int j=1; j<=n; j++)
            if(mp[i][j]==1)
                ans1++;
        minv=min(minv,ans1);
        maxv=max(maxv,ans1);
    }
    ans+=(maxv-minv)*(maxv-minv);
    minv=n+1;
    maxv=-1;
    for(int j=1; j<=n; j++)
    {
        int ans1=0;
        for(int i=1; i<=n; i++)
            if(mp[i][j]==1)
                ans1++;
        minv=min(minv,ans1);
        maxv=max(maxv,ans1);
    }
    ans+=(maxv-minv)*(maxv-minv);
    cout<<ans<<endl;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
            cout<<mp[i][j];
        cout<<endl;
    }
}
signed main()
{
    int t;
    cin>>t;
    while(t--)
        solve();
}
原文地址:https://www.cnblogs.com/QingyuYYYYY/p/13223143.html