QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#89814#1283. Paper-cuttingAFewSunsAC ✓278ms137764kbC++144.1kb2023-03-21 14:50:252023-03-21 14:50:32

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-03-21 14:50:32]
  • 评测
  • 测评结果:AC
  • 用时:278ms
  • 内存:137764kb
  • [2023-03-21 14:50:25]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
namespace my_std{
	#define ll long long
	#define bl bool
	ll my_pow(ll a,ll b,ll mod){
		ll res=1;
		if(!b) return 1;
		while(b){
			if(b&1) res=(res*a)%mod;
			a=(a*a)%mod;
			b>>=1;
		}
		return res;
	}
	ll qpow(ll a,ll b){
		ll res=1;
		if(!b) return 1;
		while(b){
			if(b&1) res*=a;
			a*=a;
			b>>=1;
		}
		return res;
	}
	#define db double
	#define pf printf
	#define pc putchar
	#define fr(i,x,y) for(register ll i=(x);i<=(y);i++)
	#define pfr(i,x,y) for(register ll i=(x);i>=(y);i--)
	#define go(u) for(ll i=head[u];i;i=e[i].nxt)
	#define enter pc('\n')
	#define space pc(' ')
	#define fir first
	#define sec second
	#define MP make_pair
	#define il inline
	#define inf 8e18
	#define random(x) rand()*rand()%(x)
	#define inv(a,mod) my_pow((a),(mod-2),(mod))
	il ll read(){
		ll sum=0,f=1;
		char ch=0;
		while(!isdigit(ch)){
			if(ch=='-') f=-1;
			ch=getchar();
		}
		while(isdigit(ch)){
			sum=sum*10+(ch^48);
			ch=getchar();
		}
		return sum*f;
	}
	il void write(ll x){
		if(x<0){
			x=-x;
			pc('-');
		}
		if(x>9) write(x/10);
		pc(x%10+'0');
	}
	il void writeln(ll x){
		write(x);
		enter;
	}
	il void writesp(ll x){
		write(x);
		space;
	}
}
using namespace my_std;
vector<ll> a[1000010],ck[1000010];
ll T,n,m,cnt=0,f[2000020],ans=inf;
char s[1000010],t[2000020];
bl ckl[1000010],ckr[1000010],cku[1000010],ckd[1000010];
struct node{
	ll l,r,d,u;
}p[1000010];
void init(ll N){
	ll len=2*N+2;
	t[0]='*';
	t[len]='&';
	fr(i,1,len-1){
		if(i%2==0) t[i]=s[i/2];
		else t[i]='%';
	}
	ll maxx=0,mid=0;
	fr(i,1,len){
		if(i<maxx) f[i]=min(f[2*mid-i],maxx-i);
		else f[i]=1;
		while(t[i-f[i]]==t[i+f[i]]) f[i]++;
		if(maxx<i+f[i]){
			mid=i;
			maxx=i+f[i];
		}
	}
}
void dfs(ll x,ll y){
	ck[x][y]=1;
	p[cnt].l=min(p[cnt].l,y);
	p[cnt].r=max(p[cnt].r,y);
	p[cnt].u=min(p[cnt].u,x);
	p[cnt].d=max(p[cnt].d,x);
	if(x>1&&!a[x-1][y]&&!ck[x-1][y]) dfs(x-1,y);
	if(x<n&&!a[x+1][y]&&!ck[x+1][y]) dfs(x+1,y);
	if(y>1&&!a[x][y-1]&&!ck[x][y-1]) dfs(x,y-1);
	if(y<m&&!a[x][y+1]&&!ck[x][y+1]) dfs(x,y+1);
}
void solve(ll dx,ll dy){
	fr(i,1,n) fr(j,1,m) ck[i][j]=0;
	fr(i,1,cnt){
		ck[p[i].u][p[i].l]++;
		ck[p[i].d+1-dx][p[i].l]--;
		ck[p[i].u][p[i].r+1-dy]--;
		ck[p[i].d+1-dx][p[i].r+1-dy]++;
	}
	fr(i,1,n) fr(j,1,m) ck[i][j]+=ck[i][j-1]+ck[i-1][j]-ck[i-1][j-1];
	fr(i,1,n) fr(j,1,m) ck[i][j]+=ck[i][j-1]+ck[i-1][j]-ck[i-1][j-1];
	ll d=0,r=0;
	fr(u,1,n){
		if(!cku[u]) continue;
		if(d<u) d=u;
		while(d<n&&!ckd[d]) d++;
		if(!ckd[d]) break;
		r=0;
		fr(l,1,m){
			if(!ckl[l]) continue;
			if(r<l) r=l;
			while(r<m&&!ckr[r]) r++;
			if(!ckr[r]) break;
			if(a[u][l]==inf) a[u][l]=0;
			if(dx^dy) a[u][l]-=ck[d-dx][r-dy]-ck[u-1][r-dy]-ck[d-dx][l-1]+ck[u-1][l-1];
			else a[u][l]+=ck[d-dx][r-dy]-ck[u-1][r-dy]-ck[d-dx][l-1]+ck[u-1][l-1];
		}
	}
}
void clr(){
	fr(i,1,m) ckl[i]=ckr[i]=0;
	fr(i,1,n) cku[i]=ckd[i]=0;
	fr(i,0,n+1) a[i].clear();
	fr(i,0,n+1) ck[i].clear();
	ans=inf;
	cnt=0;
}
int main(){
	T=read();
	while(T--){
		n=read();
		m=read();
		fr(i,0,n+1) a[i].resize(m+2);
		fr(i,0,n+1) ck[i].resize(m+2);
		fr(i,1,n) cku[i]=ckd[i]=1;
		fr(i,1,m) ckl[i]=ckr[i]=1;
		fr(i,1,n){
			scanf("%s",s+1);
			fr(j,1,m) a[i][j]=s[j]-'0';
			init(m);
			ll lst=1;
			fr(j,2,m){
				ckl[j]&=(lst>=(j-(f[2*j-1]-1)/2));
				if(ckl[j]) lst=j;
			}
			lst=m;
			pfr(j,m-1,1){
				ckr[j]&=(lst<=(j+(f[2*j+1]-1)/2));
				if(ckr[j]) lst=j;
			}
		}
		fr(j,1,m){
			fr(i,1,n) s[i]=a[i][j]+'0';
			init(n);
			ll lst=1;
			fr(i,2,n){
				cku[i]&=(lst>=(i-(f[2*i-1]-1)/2));
				if(cku[i]) lst=i;
			}
			lst=n;
			pfr(i,n-1,1){
				ckd[i]&=(lst<=(i+(f[2*i+1]-1)/2));
				if(ckd[i]) lst=i;
			}
		}
		fr(i,1,n){
			fr(j,1,m){
				if(!ck[i][j]&&!a[i][j]){
					p[++cnt]=(node){j,j,i,i};
					dfs(i,j);
				}
			}
		}
		fr(i,1,n) fr(j,1,m) a[i][j]=inf;
		solve(0,0);
		solve(1,0);
		solve(0,1);
		solve(1,1);
		fr(i,1,n) fr(j,1,m){
			ans=min(ans,a[i][j]);
		}
		writeln(ans);
		clr();
	}
}
/*
1
1 10
1100110101
ans:
2
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 14ms
memory: 50456kb

input:

3
2 5
11001
11001
5 7
1001100
0110011
0101101
0010010
1000000
3 2
11
11
11

output:

1
4
0

result:

ok 3 tokens

Test #2:

score: 0
Accepted
time: 203ms
memory: 50372kb

input:

100000
3 3
010
101
101
4 2
10
10
10
10
4 2
11
00
00
11
7 1
1
0
0
1
1
0
0
6 1
1
0
0
1
1
1
5 2
11
00
00
11
11
10 1
1
0
0
0
0
0
0
0
0
1
9 1
0
0
0
0
0
0
0
0
0
10 1
1
1
1
1
1
1
1
1
1
0
9 1
0
0
0
0
0
0
1
1
0
1 10
0010000100
7 1
0
0
0
0
0
0
0
4 2
00
00
00
00
7 1
0
1
0
0
0
0
1
10 1
1
0
0
0
0
0
0
0
0
1
9 1
1...

output:

3
1
1
1
1
1
1
1
1
1
2
1
1
2
1
1
1
1
2
2
1
1
1
0
1
0
2
1
1
1
1
2
1
0
2
2
2
1
2
1
2
2
1
0
1
1
1
2
1
1
1
1
1
1
2
0
1
1
1
1
1
1
1
1
0
3
2
1
3
1
1
3
1
1
1
2
1
1
1
1
1
3
1
1
2
0
1
1
1
2
2
1
1
1
1
2
2
1
2
2
3
2
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
2
2
2
1
1
5
1
1
1
2
1
1
2
2
2
2
2
1
1
1
2
2
2
1
1
2
2
1
3
1
1
2
1
...

result:

ok 100000 tokens

Test #3:

score: 0
Accepted
time: 117ms
memory: 50360kb

input:

10000
65 1
1
0
1
0
1
1
1
1
1
0
0
1
1
1
0
1
1
0
1
0
1
0
1
0
1
1
1
1
0
1
0
1
1
0
1
0
0
1
0
1
1
0
1
0
0
1
0
1
0
0
1
0
1
0
0
1
0
1
1
0
1
0
0
1
0
81 1
0
0
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
0
0
0
1
0
0
0
0
1
0
1
0
1
0
1
0
1
1
0
1
1
1
0
0
...

output:

17
17
2
4
4
11
2
3
5
4
4
9
8
5
5
6
2
7
5
8
1
3
1
12
3
1
3
9
4
9
1
4
1
5
4
3
9
2
3
4
3
5
7
7
9
10
10
3
4
1
3
13
7
11
11
14
20
4
6
3
5
3
11
5
9
2
4
9
8
10
8
5
6
5
11
7
2
4
3
6
3
4
9
2
7
4
9
5
4
5
1
2
11
2
2
2
15
3
12
3
6
3
3
11
7
4
12
4
17
4
5
5
1
8
25
3
10
4
5
9
1
3
5
2
4
3
13
4
4
8
7
9
9
1
9
3
1
2
8...

result:

ok 10000 tokens

Test #4:

score: 0
Accepted
time: 83ms
memory: 50644kb

input:

1000
977 1
1
1
1
1
1
1
0
0
1
1
0
0
0
1
0
1
1
0
1
0
0
1
0
0
0
0
0
0
0
0
1
1
1
0
1
1
0
1
1
0
0
1
0
1
0
1
1
1
1
1
0
0
1
0
0
0
1
0
0
1
1
1
0
1
0
0
0
1
1
1
0
0
0
0
0
1
0
0
0
1
0
1
0
0
0
1
1
0
0
0
1
0
0
1
0
0
1
1
0
0
0
1
1
0
0
0
1
0
1
0
0
1
0
0
0
1
1
0
1
0
0
0
0
0
0
1
0
1
0
1
0
1
1
1
0
1
0
0
0
1
0
0
1
1
0...

output:

102
167
21
25
74
28
12
62
62
42
22
88
14
77
147
11
47
89
18
48
40
6
44
235
22
130
118
31
19
60
117
42
10
2
99
36
87
9
143
37
73
67
25
12
37
28
13
54
31
90
47
108
12
107
27
18
6
20
3
29
52
89
49
17
30
13
12
41
52
49
19
117
33
10
63
32
65
35
19
16
19
28
64
67
68
34
103
46
31
67
22
41
117
27
113
112
42...

result:

ok 1000 tokens

Test #5:

score: 0
Accepted
time: 97ms
memory: 52076kb

input:

100
8148 1
1
1
1
0
1
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
1
1
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0...

output:

681
33
1156
568
237
528
311
229
1604
547
872
271
794
491
557
322
241
633
807
304
160
435
636
355
604
95
27
962
160
761
24
23
711
294
356
14
472
207
428
2371
539
1007
201
140
158
352
162
188
437
771
1286
1003
67
560
592
1002
408
238
71
74
359
1736
717
630
462
581
790
745
80
656
562
441
737
838
322
32...

result:

ok 100 tokens

Test #6:

score: 0
Accepted
time: 167ms
memory: 62472kb

input:

10
92831 1
0
1
0
0
0
1
0
0
1
0
1
1
0
1
0
0
1
0
1
1
0
1
1
1
0
1
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
0
0
1
0
0
1
0
1
0
0
0
0
0
0
1
1
0
0
0
1
1
0
0
0
1
0
0
0
0
1
0
1
0
0
1
1
1
0
1
0
0
1
0
1
0
1
1
0
1
1
1
0
0
0
1
1
0
1
1
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
1
0
0
0
1
0
1
1
1
0
1
0
0
1
0
1
0
1
1
0
1...

output:

5125
5258
4511
3428
198
5218
11694
9294
13007
1583

result:

ok 10 tokens

Test #7:

score: 0
Accepted
time: 133ms
memory: 60612kb

input:

10
53270 1
0
1
1
0
1
1
1
1
0
1
0
0
1
1
1
0
0
0
1
0
1
0
1
1
1
0
0
1
0
1
1
1
1
0
0
1
1
0
1
1
0
1
1
0
0
0
1
0
0
0
1
0
1
1
0
1
1
1
0
0
0
1
0
1
1
0
0
1
0
0
0
1
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
1
1
0
0
0
1
1
0
1
1
1
1
1
0
0
0
1
1
1
1
1
0
0
1
0
0
0
0
0
0
1
1
0
1
1
0
0
1
1
0
0
1
0
1
1
1
0
0
1
1
1
0
0
1
0
1
1
0...

output:

6730
5017
389
2178
4679
5753
17391
4823
4599
1961

result:

ok 10 tokens

Test #8:

score: 0
Accepted
time: 62ms
memory: 73020kb

input:

1
1000 1000
011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110...

output:

8

result:

ok "8"

Test #9:

score: 0
Accepted
time: 79ms
memory: 75252kb

input:

1
1000 1000
010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010...

output:

41761

result:

ok "41761"

Test #10:

score: 0
Accepted
time: 80ms
memory: 127896kb

input:

1
1 1000000
011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110...

output:

2

result:

ok "2"

Test #11:

score: 0
Accepted
time: 95ms
memory: 129060kb

input:

1
1 1000000
010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010...

output:

196419

result:

ok "196419"

Test #12:

score: 0
Accepted
time: 66ms
memory: 101828kb

input:

1
2 500000
0110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100110100110010110100101100110100110010110011010010110100110010110011010011001011010010110011010010110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100...

output:

4

result:

ok "4"

Test #13:

score: 0
Accepted
time: 73ms
memory: 103320kb

input:

1
2 500000
0100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100...

output:

242787

result:

ok "242787"

Test #14:

score: 0
Accepted
time: 66ms
memory: 68368kb

input:

1
1000 1000
001110010110101011110111111111111001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011...

output:

1964

result:

ok "1964"

Test #15:

score: 0
Accepted
time: 60ms
memory: 68312kb

input:

1
1000 1000
110111101111100011000110100110100000111100101011101010010001000101110101000101011101101111011001011100001011001101101101101101101101101000000101101101101101101101101101101101101101101101101000000101101101101101101101101101101101101101101101101000000101101101101101101101101101101101101101...

output:

31620

result:

ok "31620"

Test #16:

score: 0
Accepted
time: 64ms
memory: 67420kb

input:

1
1000 1000
001101100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110000000000000000110111101100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110...

output:

15347

result:

ok "15347"

Test #17:

score: 0
Accepted
time: 58ms
memory: 67096kb

input:

1
1000 1000
100100111100100100111100100000010011110010010011110011111100111100100100111100100000010011110010010011110011001111001001001111001000000100111100100100111100111111001111001001001111001000000100111100100100111100100100110010010011110010010011110010000001001111001001001111001111110011110010...

output:

11049

result:

ok "11049"

Test #18:

score: 0
Accepted
time: 69ms
memory: 67832kb

input:

1
1000 1000
110011111111110011111111110011101101110011111111110011111111110011001100111111111100111111111100111011011100111111111100111111111100110111101100111111111100111111111100111011011100111111111100111111111100110011001111111111001111111111001110110111001111111111001111111111001111001111111111...

output:

29274

result:

ok "29274"

Test #19:

score: 0
Accepted
time: 64ms
memory: 98508kb

input:

1
2 500000
1110011110101110101010111000001111010001010011111011100010010101111111100011100100110000110100000011111011001100110111011100101000001001101001010001100000101101100110011100100010001100001000110001011100111101010100000101010010101100100111110010011100101011001011001000110110001100100110110...

output:

110436

result:

ok "110436"

Test #20:

score: 0
Accepted
time: 77ms
memory: 93968kb

input:

1
2 500000
0010101010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...

output:

74967

result:

ok "74967"

Test #21:

score: 0
Accepted
time: 71ms
memory: 71520kb

input:

1
10 100000
011001110011010111100111000010101101110101100001010100011000100111110100101101011011001000111101001100101100001111101011000111111011001010110101101110111011111011011110010101011010010111010000100001111100111111010100111110011011101001001010000101001100011011010011011100111100011001110011...

output:

4288

result:

ok "4288"

Test #22:

score: 0
Accepted
time: 50ms
memory: 77488kb

input:

1
5 200000
0000011000110110110101000110110111110001000011011110001111111100010101010010111111011010001111001011000111111011101111111110010101011000001111010110001000000010101001100001100100110110101100000010100011110100010001001110100011101100110010111110001111011001010101101110110110011001110111101...

output:

22390

result:

ok "22390"

Test #23:

score: 0
Accepted
time: 68ms
memory: 84604kb

input:

1
3 333333
0011101010011000011110000111111000011110000000011110000111111000011110000000011110000111111000011110000000011110000111111000011110000110110110000111100001111110000111100000000111100001111110000111100000000111100001111110000111100000000111100001111110000111100001100110000111100001111110000...

output:

17650

result:

ok "17650"

Test #24:

score: 0
Accepted
time: 66ms
memory: 71616kb

input:

1
20000 50
01111000010000101101000010110110011011010000101101
10000111101111010010111101001001100100101111010010
10000111101111010010111101001001100100101111010010
10000111101111010010111101001001100100101111010010
01111000010000101101000010110110011011010000101101
1000011110111101001011110100100110...

output:

3184

result:

ok "3184"

Test #25:

score: 0
Accepted
time: 81ms
memory: 72532kb

input:

1
25000 40
0000101100110100001011001101000101011101
0000101100110100001011001101000101011101
1111010011001011110100110010111010100010
1111010011001011110100110010111010100010
0000101100110100001011001101000101011101
0000101100110100001011001101000101011101
0000101100110100001011001101000101011101
11...

output:

23804

result:

ok "23804"

Test #26:

score: 0
Accepted
time: 63ms
memory: 71336kb

input:

1
33333 30
010000011110000001111000000100
010000011110000001111000000100
101111100001111110000111111011
010000011110000001111000000100
101111100001111110000111111011
101111100001111110000111111011
010000011110000001111000000100
101111100001111110000111111011
101111100001111110000111111011
1011111000...

output:

22032

result:

ok "22032"

Test #27:

score: 0
Accepted
time: 81ms
memory: 76428kb

input:

1
100000 10
0000000010
1111111101
1111111101
0000000010
0000000010
1111111101
0000000010
1111111101
1111111101
0000000010
0000000010
0000000010
1111111101
1111111101
0000000010
0000000010
1111111101
1111111101
0000000010
1111111101
1111111101
1111111101
0000000010
1111111101
1111111101
0000000010
11...

output:

29876

result:

ok "29876"

Test #28:

score: 0
Accepted
time: 278ms
memory: 137764kb

input:

1
1000000 1
1
0
0
0
0
0
1
0
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
1
1
0
0
1
1
1
1
1
1
1
1
0
0
1
1
0
0
1
...

output:

30793

result:

ok "30793"