这是一道神奇的构造题,题意就是让你构造一个00子串和是n0,01和10子串和是n1, 11的子串和是n2,很简单的一道构造题,但是需要好多细节,就当是锻炼耐心的写一堆屎山代码
题目:ac代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#include <deque>
using namespace std;
const int N = 8010;
int a[N];
int s[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--)
{
deque<char> dq;
int n0, n1, n2;
cin >> n0 >> n1 >> n2;
if (n2)
{
dq.push_back('1');
while (n2--)
{
dq.push_back('1');
}
if (n0)
{
dq.push_back('0');
while (n0--)
{
dq.push_back('0');
}
if (n1 % 2 == 0 && n1 > 0)
dq.push_back('1'), n1 -= 2;
else
n1--;
while (n1 > 0)
{
dq.push_front('0');
dq.push_front('1');
n1 -= 2;
}
}
else if (n1)
{
if (n1 % 2 != 0)
{
n1--;
dq.push_back('0');
}
while (n1 > 0)
{
n1 -= 2;
dq.push_front('0');
dq.push_front('1');
}
}
while (dq.size())
{
cout << dq.front();
dq.pop_front();
}
}
else if (n0)
{
// puts("ALSDKP");
dq.push_back('0');
while (n0--)
{
dq.push_back('0');
}
if (n1)
{
if (n1 % 2 == 0)
{
n1 -= 2;
dq.push_back('1');
dq.push_front('1');
}
else if (n1 % 2 != 0)
{
n1--;
dq.push_front('1');
}
while (n1 > 0)
{
n1 -= 2;
dq.push_front('0');
dq.push_front('1');
}
}
while (dq.size())
{
cout << dq.front();
dq.pop_front();
}
}
else if (n1)
{
if (n1 % 2 != 0)
{
n1--;
dq.push_back('1');
dq.push_back('0');
}
else
{
n1 -= 2;
dq.push_back('1');
dq.push_back('0');
dq.push_back('1');
}
while (n1 > 0)
{
n1 -= 2;
dq.push_front('0');
dq.push_front('1');
}
while (dq.size())
{
cout << dq.front();
dq.pop_front();
}
}
cout <<endl;
}
}