QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#893992#1289. A + B Problem2147483647strRE 0ms0kbC++141.6kb2025-02-11 10:02:482025-02-11 10:02:48

Judging History

This is the latest submission verdict.

  • [2025-02-11 10:02:48]
  • Judged
  • Verdict: RE
  • Time: 0ms
  • Memory: 0kb
  • [2025-02-11 10:02:48]
  • Submitted

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

output:


result: