列表

详情


NC237733. 01串题

描述

    你有a0,和b1,你需要用这些01字符构造出一个长度为01字符串,随后小红会进行无数次操作,每次操作会选择一对相邻且相同的字符,并将他们删除,然后将剩余的字符串拼接起来。直到无法进行该操作为止。
你需要保证你构造出的字符串在经过小红的的无数次操作之后,剩余字符串长度为x

输入描述

第一行输入三个非负整数a,b,x,分别代表0,1的数目和最后的字符串长度。
,且ab不同时为0。
保证x一定是偶数。

输出描述

输出你构造出来的字符串,如果无法构造出来,那么输出-1。

示例1

输入:

3 1 2

输出:

0001

说明:

我们可以将23位置删除,最后生成字符串01长度为2

示例2

输入:

2 1 2

输出:

-1

说明:

我们无法生成字符串

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 10ms, 内存消耗: 512K, 提交时间: 2023-07-31 09:35:11

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int main()
{
	int a,b,x;
	cin>>a>>b>>x;
	int l=x/2;
	if(a<l||b<l||(a-l)&1||(b-l)&1) return cout<<-1,0;
	for(int i=1;i<=a-l;i++) cout<<0;
	for(int i=1;i<=l;i++) cout<<"01";
	for(int i=1;i<=b-l;i++) cout<<1;
}

C 解法, 执行用时: 4ms, 内存消耗: 456K, 提交时间: 2022-06-03 20:07:41

#include<stdio.h>
main()
{ int a,b,x,k=0,i,l;
  scanf("%d%d%d",&a,&b,&x);
  l=x/2;
  if(a<l || b<l || (a-l)%2!=0 || (b-l)%2!=0) k=1;
  if(k==1) printf("-1");
  if(k==0)
  { for(i=0;i<a-l;i++) printf("0");
    for(i=0;i<l;i++) printf("01");
    for(i=0;i<b-l;i++) printf("1");
  }
}

pypy3 解法, 执行用时: 121ms, 内存消耗: 25920K, 提交时间: 2022-06-03 19:43:48

a,b,x=map(int, input().split())
if x==0 and not a&1 and not b&1:
    print(a*'0'+b*'1')
elif (a+b)&1 or min(a,b)*2<x or (a-x//2)&1 or (b-x//2)&1:
    print(-1)
else:
    a-=x//2-1
    b-=x//2-1
    print(a*'0'+b*'1'+'01'*(x//2-1))
    

Python3 解法, 执行用时: 44ms, 内存消耗: 4852K, 提交时间: 2022-06-05 20:39:56

a,b,x=map(int,input().split())
x>>=1
print(-1 if min(a,b)<x or a-x&1 or b-x&1 else'01'*x+'0'*(a-x)+'1'*(b-x))

上一题