求调,一直WAon12
查看原帖
求调,一直WAon12
448884
快乐的大童楼主2022/8/24 11:31
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<map>
#include<unordered_map>
#include<vector>
#define x1 xx1
#define y1 yy1
using namespace std;
inline int R(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)){x=x*10+ch-48;ch=getchar();}return x*f;
}
inline void write(int x){
	if(x<0){x=-x;putchar('-');}
	int y=0;char z[70];
	while(x||!y){z[y++]=x%10+48;x/=10;}
	while(y--)putchar(z[y]);
}
inline void writesp(int x){
	if(x<0){x=-x;putchar('-');}
	int y=0;char z[70];
	while(x||!y){z[y++]=x%10+48;x/=10;}
	while(y--)putchar(z[y]);putchar(32);
}
inline void writeln(int x){
	if(x<0){x=-x;putchar('-');}
	int y=0;char z[70];
	while(x||!y){z[y++]=x%10+48;x/=10;}
	while(y--)putchar(z[y]);putchar(10);
}
inline char read(){
	char ch=getchar();
	while(1) ch=getchar();
	return ch;
}
const int N=505;
int n,m,a[N][N],cnt[N][N];
int mx1[N*N],mx2[N*N],mn1[N*N],mn2[N*N];
int main(){
	n=R(),m=R();
	for(int i=1;i<=n;i++) 
		for(int j=1;j<=n;j++)
			a[i][j]=R();
	for(int i=1;i<=n*n;i++)	mx1[i]=mx2[i]=0,mn1[i]=mn2[i]=n+1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			mx1[a[i][j]]=max(mx1[a[i][j]],i);
			mx2[a[i][j]]=max(mx2[a[i][j]],j);
			mn1[a[i][j]]=min(mn1[a[i][j]],i);
			mn2[a[i][j]]=min(mn2[a[i][j]],j);
		}
	int num=0;
	for(int i=1;i<=n*n;i++)
		if(mx1[i])
			num++;
	if(num<=m){
		write(m-num);
		return 0;
	}
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				cnt[i][j]=0;
		for(int i=1;i<=n*n;i++){
			if(mx1[i]){
				int max1=max(mx1[i]-k+1,1);
				int min1=min(mn1[i],n-k+1);
				int max2=max(mx2[i]-k+1,1);
				int min2=min(mn2[i],n-k+1);
				if(max1<=min1&&max2<=min2){
					cnt[max1][max2]++;
					cnt[min1+1][min2+1]++;
					cnt[max1][min2+1]--;
					cnt[min1+1][max2]--;
				}
			}
		}
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				cnt[i][j]+=cnt[i-1][j]+cnt[i][j-1]+cnt[i-1][j-1];
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				if(m==num-cnt[i][j]||m==num-cnt[i][j]+1){
					puts("1");
					return 0;
				}
	}
	puts("2");
}

求调,一上午交了20发罚时

2022/8/24 11:31
加载中...