开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第34天,点击查看活动详情
AcWing——4784. 构造序列
4784. 构造序列 - AcWing题库
请你构造一个 0101 序列,序列需要满足以下所有要求:
- 恰好包含 nn 个 00 和 mm 个 11。
- 不存在两个或两个以上的 00 连续相邻。
- 不存在三个或三个以上的 11 连续相邻。
输入格式
共一行,包含两个整数 n,mn,m。
输出格式
输出共一行,如果存在满足条件的 0101 序列,则输出满足条件的 0101 序列,否则输出 -1。
如果答案不唯一,则输出任意合理答案均可。
数据范围
前 66 个测试点满足 1≤n,m≤101≤n,m≤10。 所有测试点满足 1≤n,m≤1061≤n,m≤106。
输入样例1:
1 2
输出样例1:
101
输入样例2:
4 8
输出样例2:
110110110101
输入样例3:
4 10
输出样例3:
11011011011011
输入样例4:
1 5
输出样例4:
-1
问题解析
最极限的两个情况就是
- n==(m-1)/2。此时摆放情况是:11011.
- n==m+1。此时摆放情况是:010.
那么如果n<(m-1)/2或n>m+1,那就只能输出-1.其它的都是可以构造出正确答案的。
这里我是先输出2个1和1个0的方法把n和m变得一样。
再一个1一个0的输出。
AC代码
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<math.h>
#include<set>
#include <random>
#include<numeric>
#include<string>
#include<string.h>
#include<iterator>
#include<fstream>
#include<map>
#include<unordered_map>
#include<stack>
#include<list>
#include<queue>
#include<iomanip>
#include<bitset>
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
#define endl '\n'
#define int ll
#define PI acos(-1)
#define INF 0x3f3f3f3f
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll>PII;
const int N = 2e5 + 50, MOD = 998244353;
int a[N];
void solve()
{
int n, m;
cin >> n >> m;
if (n > m + 1 || n < (m - 1) / 2)
{
cout << -1 << endl;
return;
}
if (n == m + 1)
{
int idx = 1, num = 0;
while (idx <= n+m)
{
cout << num;
idx++;
num ^= 1;
}
return;
}
int cnt = min(n, m - n);
while (cnt--)
{
cout << "110";
n--;
m -= 2;
}
while (n--)
{
cout << "10";
m--;
}
while (m--)cout << 1;
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t = 1;
//cin >> t;
while (t--)
{
solve();
}
return 0;
}