QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#26744 | #1283. Paper-cutting | Wu_Ren | AC ✓ | 128ms | 98400kb | C++17 | 2.7kb | 2022-04-08 08:54:54 | 2022-04-29 04:20:13 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
char a[1000010],b[1000010];
int n,m,x[1000010],y[1000010],l[1000010],r[1000010],X,Y,L,R,fx[4][2]={{0,1},{0,-1},{1,0},{-1,0}},lst[1000010];
bool vis[1000010];
struct seg{
int l,r;
};
struct bit{
int tr[1000010];
void clr(){
for(int i=1;i<=m;i++) tr[i]=0;
}
void add(int x,int c){
for(int i=x;i<=m;i+=(i&-i)) tr[i]+=c;
}
int qry(int x){
int res=0;
for(int i=x;i;i-=(i&-i)) res+=tr[i];
return res;
}
}Lt,Rt;
vector<seg>ad[1000010],dl[1000010];
void dfs(int i,int j){
X=min(i,X),Y=max(i,Y),L=min(j,L),R=max(j,R);
vis[(i-1)*m+j]=1;
for(int k=0;k<4;k++){
int xx=i+fx[k][0],yy=j+fx[k][1];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[(xx-1)*m+yy]=='0'&&!vis[(xx-1)*m+yy]) dfs(xx,yy);
}
}
bool cmp(char *a,int n,int m,int x,int y){
if(x==y) return 1;
if(x>m||y>m) return 0;
if(x<1||y<1) return 0;
for(int i=1;i<=n;i++) if(a[(i-1)*m+x]!=a[(i-1)*m+y]) return 0;
return 1;
}
void sol(char *a,int n,int m,int *l,int *r){
static int c[2000010],t,mnc[2000010],f[1000010];
t=0;
for(int j=1;j<=m;j++) c[++t]=-1,c[++t]=j;
c[++t]=-1,c[++t]=1e9,c[t+1]=0;
for(int i=1,p,r=0;i<=t;i++){
if(r>=i) mnc[i]=min(mnc[2*p-i],r-i+1);
else mnc[i]=0;
while(i-mnc[i]>=1&&i+mnc[i]<=t&&cmp(a,n,m,c[i-mnc[i]],c[i+mnc[i]])) mnc[i]++;
if(i+mnc[i]-1>r) p=i,r=i+mnc[i]-1;
}
l[1]=f[1]=1,f[0]=0;
for(int j=2;j<=m;j++){
int p=mnc[2*j-1]/2;
l[j]=(f[j-1]-f[j-p-1]>0);
f[j]=f[j-1]+l[j];
}
r[m]=f[m]=1,f[m+1]=0;
for(int j=m-1;j>=1;j--){
int p=mnc[2*j+1]/2;
r[j]=(f[j+1]-f[j+p+1]>0);
f[j]=f[j+1]+r[j];
}
}
void sol(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",a+1+(i-1)*m);
for(int j=1;j<=m;j++) b[(j-1)*n+i]=a[(i-1)*m+j],vis[(i-1)*m+j]=0;
ad[i].clear(),dl[i].clear();
}
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[(i-1)*m+j]=='0'&&!vis[(i-1)*m+j]){
X=Y=i,L=R=j,dfs(i,j);
ad[X].push_back({L,R});
dl[Y].push_back({L,R});
// cerr<<"("<<X<<","<<Y<<")x("<<L<<","<<R<<")\n";
}
sol(a,n,m,l,r),sol(b,m,n,x,y);
// for(int j=1;j<=m;j++) cout<<l[j]<<" ";puts("");
// for(int j=1;j<=m;j++) cout<<r[j]<<" ";puts("");
// for(int i=1;i<=n;i++) cout<<x[i]<<" ";puts("");
// for(int i=1;i<=n;i++) cout<<y[i]<<" ";puts("");
for(int j=m,x=m;j>=1;j--){
if(r[j]) x=j;
lst[j]=x;
}
int ans=2e9;
Lt.clr(),Rt.clr();
for(int i=1,j=1;i<=n;i++){
while(j<=n&&(!y[j-1]||j<=i)){
for(seg &l:ad[j]) Lt.add(l.l,1),Rt.add(l.r,1);
j++;
}
if(x[i]){
for(int k=1;k<=m;k++) if(l[k]){
int r=lst[k],w=Lt.qry(m)-Rt.qry(k-1)-(Lt.qry(m)-Lt.qry(r));
ans=min(ans,w);
}
}
for(seg &l:dl[i]) Lt.add(l.l,-1),Rt.add(l.r,-1);
}
printf("%d\n",ans);
}
int main(){
int _;
scanf("%d",&_);
while(_--) sol();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 12ms
memory: 50776kb
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: 128ms
memory: 50728kb
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: 83ms
memory: 50716kb
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: 54ms
memory: 50936kb
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: 63ms
memory: 51620kb
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: 72ms
memory: 57952kb
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: 79ms
memory: 57740kb
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: 24ms
memory: 58772kb
input:
1 1000 1000 011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110...
output:
8
result:
ok "8"
Test #9:
score: 0
Accepted
time: 27ms
memory: 59568kb
input:
1 1000 1000 010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010...
output:
41761
result:
ok "41761"
Test #10:
score: 0
Accepted
time: 58ms
memory: 97576kb
input:
1 1 1000000 011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110...
output:
2
result:
ok "2"
Test #11:
score: 0
Accepted
time: 76ms
memory: 98400kb
input:
1 1 1000000 010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010...
output:
196419
result:
ok "196419"
Test #12:
score: 0
Accepted
time: 42ms
memory: 79948kb
input:
1 2 500000 0110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100110100110010110100101100110100110010110011010010110100110010110011010011001011010010110011010010110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100...
output:
4
result:
ok "4"
Test #13:
score: 0
Accepted
time: 77ms
memory: 80404kb
input:
1 2 500000 0100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100...
output:
242787
result:
ok "242787"
Test #14:
score: 0
Accepted
time: 28ms
memory: 55120kb
input:
1 1000 1000 001110010110101011110111111111111001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011...
output:
1964
result:
ok "1964"
Test #15:
score: 0
Accepted
time: 31ms
memory: 55152kb
input:
1 1000 1000 110111101111100011000110100110100000111100101011101010010001000101110101000101011101101111011001011100001011001101101101101101101101101000000101101101101101101101101101101101101101101101101000000101101101101101101101101101101101101101101101101000000101101101101101101101101101101101101101...
output:
31620
result:
ok "31620"
Test #16:
score: 0
Accepted
time: 23ms
memory: 54936kb
input:
1 1000 1000 001101100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110000000000000000110111101100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110...
output:
15347
result:
ok "15347"
Test #17:
score: 0
Accepted
time: 35ms
memory: 54328kb
input:
1 1000 1000 100100111100100100111100100000010011110010010011110011111100111100100100111100100000010011110010010011110011001111001001001111001000000100111100100100111100111111001111001001001111001000000100111100100100111100100100110010010011110010010011110010000001001111001001001111001111110011110010...
output:
11049
result:
ok "11049"
Test #18:
score: 0
Accepted
time: 25ms
memory: 54760kb
input:
1 1000 1000 110011111111110011111111110011101101110011111111110011111111110011001100111111111100111111111100111011011100111111111100111111111100110111101100111111111100111111111100111011011100111111111100111111111100110011001111111111001111111111001110110111001111111111001111111111001111001111111111...
output:
29274
result:
ok "29274"
Test #19:
score: 0
Accepted
time: 54ms
memory: 76236kb
input:
1 2 500000 1110011110101110101010111000001111010001010011111011100010010101111111100011100100110000110100000011111011001100110111011100101000001001101001010001100000101101100110011100100010001100001000110001011100111101010100000101010010101100100111110010011100101011001011001000110110001100100110110...
output:
110436
result:
ok "110436"
Test #20:
score: 0
Accepted
time: 56ms
memory: 74528kb
input:
1 2 500000 0010101010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
74967
result:
ok "74967"
Test #21:
score: 0
Accepted
time: 18ms
memory: 57940kb
input:
1 10 100000 011001110011010111100111000010101101110101100001010100011000100111110100101101011011001000111101001100101100001111101011000111111011001010110101101110111011111011011110010101011010010111010000100001111100111111010100111110011011101001001010000101001100011011010011011100111100011001110011...
output:
4288
result:
ok "4288"
Test #22:
score: 0
Accepted
time: 45ms
memory: 61920kb
input:
1 5 200000 0000011000110110110101000110110111110001000011011110001111111100010101010010111111011010001111001011000111111011101111111110010101011000001111010110001000000010101001100001100100110110101100000010100011110100010001001110100011101100110010111110001111011001010101101110110110011001110111101...
output:
22390
result:
ok "22390"
Test #23:
score: 0
Accepted
time: 45ms
memory: 67140kb
input:
1 3 333333 0011101010011000011110000111111000011110000000011110000111111000011110000000011110000111111000011110000000011110000111111000011110000110110110000111100001111110000111100000000111100001111110000111100000000111100001111110000111100000000111100001111110000111100001100110000111100001111110000...
output:
17650
result:
ok "17650"
Test #24:
score: 0
Accepted
time: 19ms
memory: 56736kb
input:
1 20000 50 01111000010000101101000010110110011011010000101101 10000111101111010010111101001001100100101111010010 10000111101111010010111101001001100100101111010010 10000111101111010010111101001001100100101111010010 01111000010000101101000010110110011011010000101101 1000011110111101001011110100100110...
output:
3184
result:
ok "3184"
Test #25:
score: 0
Accepted
time: 33ms
memory: 57588kb
input:
1 25000 40 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 1111010011001011110100110010111010100010 1111010011001011110100110010111010100010 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 11...
output:
23804
result:
ok "23804"
Test #26:
score: 0
Accepted
time: 27ms
memory: 56700kb
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: 45ms
memory: 59264kb
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: 120ms
memory: 89860kb
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"