C. Team【1400 / 思维 贪心】

在这里插入图片描述
https://codeforces.com/contest/401/problem/C
分三种情况考虑:

  • n==m显然可以
  • n>m 我们尽量 1001 先搞,尽可能的消耗0,然后剩下的分类讨论
  • n<m 我们先尽可能的 101 先尽量的消耗1,剩下的分类讨论。
#include<bits/stdc++.h>
using namespace std;
int n,m;
void solve()
{
    
    
	string ans;
	bool flag=false;
	if(n==m)
	{
    
     
		flag=true;
		while(n)  ans+="10",n--,m--;
	}
	else if(n>m)
	{
    
    
		while(n&&m) ans+="01",n--,m--;
		if(m<=3) flag=true;
		if(n>=2) flag=false;
		if(n) ans+="0",n--;
		while(m>2) ans=ans+"1",m--;
		while(m) ans="1"+ans,m--;
	}
	else if(m>n)
	{
    
    
		int temp=min(m-n,n);
		while(temp) ans+="110",n--,m-=2,temp--;
		while(n&&m) ans+="10",n--,m--;
		if(n<=1&&m<=2) flag=true;
		if(n) ans="0"+ans;
		while(m)  ans+="1",m--;
	}
	if(flag) cout<<ans;
	else puts("-1");
}
int main(void)
{
    
    
	cin>>n>>m;
	solve();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/bettle_king/article/details/121251474