【刷题】【cf】B. Not Sitting

由题面可以推出,Tina一定坐在教室四个角,而Rahul一定坐在可选择的最中间的位置,

原本打算按照规律,算出从k=0到k=n*m-1中,每一圈的座位数

后来发现n*m<= 1e5,直接每个座位计算,与四个角最大的距离就好

在确定方法前,一定要再看一眼数据范围啊

#include<cstdio>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
#include<iostream> 
#define ll long long
using namespace std;
inline int read()
{
    int x=0,f=1;char c=getchar();
    while(c<'0' || c>'9' ) 
    {
        if(c=='-' ) f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9' ) x=(x<<3)+(x<<1)+c-'0',c=getchar();
    return x*f;
}

int t,n,m,k;
const int N=60;
bool mp[N][N];
int a[100010];

int main()
{
    t=read();
    while(t--)
    {
        n=read(),m=read();
        
        int tot=0;
        for(int i=1;i<=n;i++) 
            for(int j=1;j<=m;j++)
                a[tot++]=max(i-1,n-i)+max(j-1,m-j);
        sort(a,a+tot);
        for(int i=0;i<=n*m-1;i++) 
            cout<<a[i]<<" ";
        cout<<endl;
    }
    
    return 0;
} 
View Code

 

posted @ 2022-01-17 19:38  心若笺诗  阅读(36)  评论(0编辑  收藏  举报