码迷,mamicode.com
首页 > 其他好文 > 详细

D - Grid-00100(Codeforces Round #654 (Div. 2))

时间:2020-07-02 13:24:06      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:mamicode   链接   cst   std   图片   cout   set   grid   最小值   

题目链接:https://codeforces.com/contest/1371/problem/D

思路: 模拟一下在矩阵中挨个放1的过程,放的时候,每次斜着放n个,如果放不下了就放对角,画个图演示一下。

技术图片

 

如图,放完9之后,把10放到右上角。 13之后,把14,15也放到右上角。 每次都放n个,左下的区域放不下了再放到右上的区域里,模拟一下这个过程。

 

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#define ll long long
#define pi 3.1415927
#define inf 0x3f3f3f3f
#define mod 1000000007
using namespace std;
int n,m;
int a[305][305];
int main ()
{
    int T,i,t,j,k,p,sum=0;
    cin>>T;
    while (T--)
    {
        memset(a,0,sizeof(a));
        cin>>n>>k;
        t=1;
        while (k)
        {
            for(i=t;i<=n;++i){  //放置左下的区域 
                if(a[i][i-t+1]==0 &&k)
                    a[i][i-t+1]=1,k--;
            }
            for(j=1;j<t;++j) //放置右上角的区域
                if(a[j][n-t+j+1]==0 &&k)
                    a[j][n-t+j+1]=1,k--;
            t++;
        }
for(i=1;i<=n;++i) for(j=1;j<=n;++j) a[0][j]+=a[i][j],a[i][0]+=a[i][j]; //计算行与列的和

int rmax=0,rmin=n,cmax=0,cmin=n; for(i=1;i<=n;++i) //找出最大值和最小值 rmax=max(rmax,a[0][i]),rmin=min(rmin,a[0][i]), cmax=max(cmax,a[i][0]),cmin=min(cmin,a[i][0]);
sum
=(rmax-rmin)*(rmax-rmin)+(cmax-cmin)*(cmax-cmin); cout<<sum<<endl; for(i=1;i<=n;++i){ for(j=1;j<=n;++j) cout<<a[i][j]; cout<<endl; } } return 0; }

 

D - Grid-00100(Codeforces Round #654 (Div. 2))

标签:mamicode   链接   cst   std   图片   cout   set   grid   最小值   

原文地址:https://www.cnblogs.com/blowhail/p/13223988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!