QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#89814 | #1283. Paper-cutting | AFewSuns | AC ✓ | 278ms | 137764kb | C++14 | 4.1kb | 2023-03-21 14:50:25 | 2023-03-21 14:50:32 |
Judging History
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"