QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#893992 | #1289. A + B Problem | 2147483647str | RE | 0ms | 0kb | C++14 | 1.6kb | 2025-02-11 10:02:48 | 2025-02-11 10:02:48 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
int n,m;
int sum[N];
char s[N],*a,*b;
int get(int l,int r){return sum[r]-sum[l-1];}
int solve(){
scanf("%d%d%s",&n,&m,s+1);
// reverse(s+1,s+1+n+m);
if(n<m)swap(n,m);
for(int i=1;i<=n+m;i++)sum[i]=sum[i-1]+(s[i]=='1');
int cur1=n,cur2=m;
a=new char[n+m+3];
b=new char[n+m+3];
memset(a,0,sizeof(char)*(n+m+3));
memset(b,0,sizeof(char)*(n+m+3));
for(int i=1;i<=n+m;i++){
// if(i==6)printf
if(cur1<cur2)swap(cur1,cur2),swap(a,b);
if(get(i,i)==1){
// printf("I:%d\n",i);
if(cur2&&get(i+1,i+cur1-1)>=cur1-cur2){
// printf("%d %d %d %d\n",i,cur1,cur2,get(i+1,i+1+cur1));
b[cur2--]=1;
}
else a[cur1--]=1;
}else if(cur2)b[cur2--]=0;
else a[cur1--]=0;
}
// for(int i=1;i<=n+m;i++)printf("%d",a[i]);puts("");
// for(int i=1;i<=n+m;i++)printf("%d",b[i]);puts("");
for(int i=1;i<=n+m+1;i++){
a[i]+=b[i];
a[i+1]+=a[i]>>1;
a[i]&=1;
}
bool flag=0;
for(int i=n+m+1;i>=1;i--){
if(a[i])flag=1;
if(flag)printf("%d",a[i]);
}
if(!flag)printf("0");
puts("");
delete[]a;
delete[]b;
return 0;
}
int main(){
system("fc partition.out example2.out");
// freopen("partition2.in","r",stdin);
// freopen("partition.out","w",stdout);
int t;scanf("%d",&t);
while(t--)solve();
return 0;
}
/*
1
9 5
01100011011110
01111011100000
00010000000000
111100110
*/
詳細信息
Test #1:
score: 0
Dangerous Syscalls
input:
3 4 3 1000101 2 2 1111 1 1 00