J题
题目大意
分别给你m个0和n个1,输出一种排序顺序使得0和1相邻挨着的个数为x个
分析
题目意思等效于在m+n个0中插入n个1,同时要判断x为奇数和偶数的情况。
代码
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#define MAX_N 2000+2
using namespace std;
int main(int argc, char const *argv[])
{
int a,b,x,n;
int c=1;
int res[MAX_N],res1[MAX_N];
scanf("%d%d%d",&a,&b,&x);
n=a+b;
if(x==2*b)
{
int k=1;
for(int i=0;i<b;i++)
{
res[k]=1;
k=k+2;
}
}
else
{
int mid=x/2;
int k=1;
for(int i=0;i<mid;i++,k+=2)
{
res[k]=1;
}
if(x%2!=0)
{
int mid1=b-mid;
int j=n-1;
for(int i=0;i<mid1;i++,j--)
{
res[j]=1;
}
}
else
{
k-=1;
int mid1=b-mid;
for(int i=0;i<mid1;i++,k++)
{
res[k]=1;
}
if(k==n)
{
c=0;
res1[0]=1;
for(int i=0,j=1;i<n-1;i++,j++)
{
res1[j]=res[i];
}
}
}
}
if(c==1)
{
for(int i=0;i<n;i++)
cout<<res[i];
}
else if(c==0)
{
for (int i = 0; i < n; ++i)
{
cout<<res1[i];
}
}
return 0;
}
总结
考虑到所有情况