QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#831261 | #1289. A + B Problem | lyx | RE | 0ms | 0kb | C++14 | 2.8kb | 2024-12-25 12:20:37 | 2024-12-25 12:20:41 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define rll register ll
#define ri register int
#define fo(i,x,y) for(ri i=(x);i<=(y);++i)
#define fu(i,x,y) for(ri i=(x);i<(y);++i)
#define fd(i,x,y) for(ri i=(x);i>=(y);--i)
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int N=2e6+5;
int T,n,m,a[2][N],k[2],la[N],ar[N],b[N],ans[N];
int jl[2][N],pre[N];
inline void air(){}
#define getchar()(p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;
template <typename T>inline void read(T& r) {
r=0;bool w=0; char ch=getchar();
while(ch<'0'||ch>'9') w=ch=='-'?1:0,ch=getchar();
while(ch>='0'&&ch<='9') r=r*10+(ch^48), ch=getchar();
r=w?-r:r;
}
inline int read(){
register char ch=getchar();
while(ch<'0'||ch>'1')ch=getchar();
return ch-'0';
}
inline int bj(){
if(jl[0][0]>jl[1][0]){
return 1;
}
if(jl[0][0]<jl[1][0])return 0;
fd(i,b[0],1){
if(jl[0][i]>jl[1][i]){
return 1;
}
if(jl[0][i]<jl[1][i])return 0;
}
return 2;
}
inline void get(){
ans[0]=b[0];
fo(i,1,b[0])ans[i]=b[i];
}
inline void upd(){
if(b[0]>ans[0]){
get();
return;
}
if(b[0]<ans[0])return;
fd(i,b[0],1){
if(b[i]>ans[i]){
get();
return;
}
if(b[i]<ans[i])return;
}
}
inline void check(ri st,ri op){
if(st<0||st>m)return;
fo(i,1,max(n,m)+1)a[0][i]=a[1][i]=b[i]=0;
k[0]=n;k[1]=m;
fo(i,1,st)a[1][k[1]--]=ar[i];
fo(i,st+1,n+m){
if(!k[0])a[1][k[1]--]=ar[i];
else if(!k[1])a[0][k[0]--]=ar[i];
else{
ri nw=k[1]>k[0];
if(k[nw^1]>=la[i]-i){
a[nw][k[nw]--]=1;
fo(j,1,la[i]-i)a[nw^1][k[nw^1]--]=0;
i=la[i];
}
else{
a[nw][k[nw]--]=0;
}
}
}
fo(i,1,max(n,m)){
b[i]+=a[0][i]+a[1][i];
b[i+1]+=b[i]/2;b[i]&=1;
}
b[0]=1;
fd(i,max(n,m)+1,1){
if(b[i]){b[0]=i;break;}
}
fo(i,0,b[0])jl[op][i]=b[i];
upd();
}
int main(){
freopen("partition.in","r",stdin);
// freopen("example2.in","r",stdin);
freopen("partition.out","w",stdout);
scanf("%d",&T);
ri js=0;
while(T--){
read(n);read(m);
if(n<m)swap(n,m);
fo(i,1,n+m){
ar[i]=read();
pre[i]=ar[i]?i:pre[i-1];
}
ri La=n+m+1;la[n+m+1]=La;
fd(i,n+m,1){
if(ar[i])La=i;la[i]=La;
}
ans[0]=0;
++js;
if(js==6607){
printf("%d %d\n",n,m);
fo(i,1,n+m){
printf("%d",ar[i]);
}
return 0;
}
ri l=0,r=m;
while(l<=r){
ri md=l+r>>1;
jl[0][0]=jl[1][0]=0;
check(md-1,0);
check(pre[md-1],0);
check(md+1,0);
check(md,0);check(la[md+1],1);
ri o=bj();
if(o==2){
if(ar[md+1])l=md+1;
else r=md-1;
}
else if(o){
r=md-1;
}
else{
l=md+1;
}
}
if(T<100){
fd(i,ans[0],1)putchar(ans[i]+'0');
puts("");
}
}
cerr<<endl<<endl<<"time:"<<(double)clock()/CLOCKS_PER_SEC<<endl;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Dangerous Syscalls
input:
3 4 3 1000101 2 2 1111 1 1 00