UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#189228#3320. 矩形(square)Lehe1003983ms503220kbC++111.3kb2023-10-04 09:16:402023-10-04 12:57:02

answer

#include <bits/stdc++.h>
using namespace std;
//#define int long long
int n,k,a[510][510],cnt[510][510][510],ans[510][510];
bool check(int i,int j,int p)
{
	int pcnt=0;
	for(int t=1;t<=n;t++)
		if(cnt[i+p-1][j+p-1][t]-cnt[i-1][j+p-1][t]-cnt[i+p-1][j-1][t]+cnt[i-1][j-1][t])
			pcnt++;
//	cout<<" "<<i<<" "<<j<<" "<<p<<" "<<pcnt<<" "<<k<<" "<<(pcnt<=k)<<endl;
	return (pcnt<=k);
}
signed main()
{
//	freopen("A.in","r",stdin);
//	freopen("A.out","w",stdout);
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			scanf("%d",&a[i][j]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			for(int k=1;k<=n;k++)
				cnt[i][j][k]=cnt[i-1][j][k]+cnt[i][j-1][k]-cnt[i-1][j-1][k]+(a[i][j]==k);
//	for(int i=1;i<=n+1;i++)ans[i][n+1]=ans[n+1][i]=n;
	for(int i=n;i>=1;i--)
		for(int j=n;j>=1;j--)
		{
//			cout<<i<<" "<<j<<" "<<r<<endl;
			if(check(i,j,ans[i+1][j+1]+1))
			{
//				cout<<i<<" "<<j<<" "<<ans[i+1][j+1]+1<<endl;
				ans[i][j]=ans[i+1][j+1]+1;
				continue;
			}
			int l=1,r=min(ans[i+1][j+1],min(n-i+1,n-j+1));
			while(l<=r)
			{
				int mid=l+r>>1;
				int pcnt=0;
				if(check(i,j,mid))ans[i][j]=mid,l=mid+1;
				else r=mid-1;
			}
		}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
			printf("%d ",ans[i][j]);
		printf("\n");
	}
	return 0;
} 

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 0ms
memory: 6580kb

input:

50 12
8 1 9 3 12 10 2 3 5 3 8 6 2 3 11 6 7 3 2 8 10 3 7 11 2 1 10 4 10 5 9 8 5 4 11 5 2 5 11 10 7 5 ...

output:

12 11 10 9 8 7 6 5 4 4 5 5 5 12 12 12 12 12 12 12 12 12 12 12 18 18 17 16 15 14 13 12 11 10 10 10 10...

result:

ok 50 lines

Test #2:

score: 10
Accepted
time: 0ms
memory: 6580kb

input:

50 14
3 13 9 2 14 12 3 13 6 13 7 12 3 10 13 4 12 4 10 9 8 6 1 14 9 13 2 6 1 2 3 13 11 4 2 6 10 5 14 ...

output:

7 7 18 17 16 15 14 13 12 11 10 9 8 7 7 7 7 6 5 6 5 18 17 16 15 14 13 12 12 12 12 12 12 12 12 12 12 1...

result:

ok 50 lines

Test #3:

score: 10
Accepted
time: 3ms
memory: 6580kb

input:

50 17
17 8 14 12 2 7 17 3 11 5 8 15 11 4 3 15 13 12 6 5 9 3 9 8 7 13 3 7 7 13 16 6 10 17 16 7 6 5 3 ...

output:

19 19 19 19 19 19 19 18 17 16 15 14 13 12 11 10 9 8 7 6 6 6 8 8 8 7 12 12 12 11 10 9 8 7 6 7 9 9 9 8...

result:

ok 50 lines

Test #4:

score: 10
Accepted
time: 512ms
memory: 503216kb

input:

500 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

output:

17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 3 3 3 29 29 29 29 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15...

result:

ok 500 lines

Test #5:

score: 10
Accepted
time: 452ms
memory: 503216kb

input:

500 2
2 1 1 1 1 1 1 2 1 2 1 1 2 2 1 2 2 2 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 2 2 2 2 1 2 2 1 2 1 1 1 1 2 ...

output:

500 499 498 497 496 495 494 493 492 491 490 489 488 487 486 485 484 483 482 481 480 479 478 477 476 ...

result:

ok 500 lines

Test #6:

score: 10
Accepted
time: 521ms
memory: 503220kb

input:

500 2
2 1 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 2 2 1 2 2 1 2 1 1 1 2 1 2 2 2 1 1 2 2 2 1 1 1 2 1 2 1 1 2 ...

output:

13 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 47 47 47 47 47 47 47 47 47 46 45 44 43 42 41 4...

result:

ok 500 lines

Test #7:

score: 10
Accepted
time: 489ms
memory: 503216kb

input:

500 2
1 1 2 2 2 1 2 1 2 2 1 2 1 2 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 2 2 1 2 2 2 2 1 1 2 1 2 2 1 2 2 2 2 ...

output:

49 49 49 49 49 49 49 49 49 49 49 49 49 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 2...

result:

ok 500 lines

Test #8:

score: 10
Accepted
time: 689ms
memory: 503216kb

input:

500 162
11 100 62 113 44 157 79 78 156 9 78 50 149 145 54 72 138 145 5 55 51 129 37 114 95 3 63 5 21...

output:

29 29 29 28 28 27 26 28 28 29 29 29 29 29 29 28 27 26 25 24 24 24 25 26 26 25 25 25 27 26 25 25 29 2...

result:

ok 500 lines

Test #9:

score: 10
Accepted
time: 686ms
memory: 503220kb

input:

500 171
23 35 15 28 60 69 4 90 37 165 8 163 129 20 87 61 115 39 135 78 55 96 21 118 165 23 145 21 16...

output:

30 29 28 27 27 31 30 29 28 27 27 27 27 28 27 26 28 29 28 27 29 30 29 28 27 30 29 33 32 31 30 29 28 3...

result:

ok 500 lines

Test #10:

score: 10
Accepted
time: 631ms
memory: 503216kb

input:

500 168
141 99 128 16 72 106 42 137 15 57 113 3 17 116 13 91 147 104 55 125 32 46 85 51 103 15 156 7...

output:

28 28 28 28 31 31 31 31 31 30 29 28 27 27 27 27 29 29 29 29 29 30 29 29 29 29 29 29 29 29 29 29 28 2...

result:

ok 500 lines

Extra Test:

score: 0
Extra Test Passed