Codeforces Round #704 (Div. 2) D - Genius‘s Gambit 思维+构造
原题链接:https://codeforces.ml/contest/1492/problem/D
目录
- 题意
- 分析
- Code
题意
给出a个0和b个1组成两个二进制串x、y,要求满足:
- x - y 的二进制中1的个数为k个
- x大于y
- x和y都没有前导零
分析
这题有很多特判的细节,提前说一下。
- 因为是x大于y,因此我们直接把x串设置成111…1000…的形式
- 当a为0或b为1时,k只要不是0就输出NO
- 当k=0时,直接输出YES
然后就是构造的技巧,先假设一个串110000。
我们先让x和y都设置为110000,然后将最右边的1往右边移,发现每移动一格,答案增加1,这时最大值为a,所以当k小于等于a时答案就出来了。
那么当k大于a怎么办,我们可以把剩余的点接着移,例如串111100。
先把y变成111001,然后再把剩余的最右边的1往右移动一格变成1101001,发现答案又增加1;再移一格变成1011001,这时就不能再移了,因为不能有前导零,这时就达到了最大的答案,只有最左端的两个值为0,其余为1。
拓展一下,a个0和b个1最多可以得到的k是a+b-2,这样就解出无解的情况了。
Code
#include <bits/stdc++.h>
using namespace std;
//#define ACM_LOCAL
#define fi first
#define se second
#define il inline
#define re register
typedef long long ll;
typedef pair<int, int> PII;
typedef unsigned long long ull;
const int N = 5e5 + 10;
const int M = 1e6 + 10;
const int INF = 1e9 + 5;
const double eps = 1e-5;
const int MOD = 998244353;void solve() {int a, b, k; cin >> a >> b >> k;if (k == 0) {cout << "YES" << endl;for (int i = 1; i <= a+b; i++) {if (i <= b) cout << 1;else cout << 0;}cout << endl;for (int i = 1; i <= a+b; i++) {if (i <= b) cout << 1;else cout << 0;}cout << endl;} else if (k > a + b - 2) cout << "No" << endl;else if (b == 1 && k != 0) cout << "NO" << endl;else if (a == 0 && k != 0) cout << "NO" << endl;else {cout << "YES" << endl;if (a >= k) {for (int i = 1; i <= a+b; i++) {if (i <= b) cout << 1;else cout << 0;}cout << endl;for (int i = 1; i <= a+b; i++) {if (i <= b-1) cout << 1;else if (i < b+k) cout << 0;else if (i == b+k) cout << 1;else cout << 0;}} else {for (int i = 1; i <= a+b; i++) {if (i <= b) cout << 1;else cout << 0;}cout << endl;int left = k-a;for (int i = 1; i <= a+b; i++) {if (i <= b-1-left) cout << 1;else if (i == b-left) cout << 0;else if (i <= b) cout << 1;else if (i <= a+b-1) cout << 0;else cout << 1;}}cout << endl;}
}signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#ifdef ACM_LOCALfreopen("input", "r", stdin);freopen("output", "w", stdout);
#endifsolve();
}
Codeforces Round #704 (Div. 2) D - Genius‘s Gambit 思维+构造相关推荐
- Codeforces Round #704 (Div. 2) D. Genius‘s Gambit 构造 + 细节
传送门 题意: 给a,b,ka,b,ka,b,k,要求用aaa个000和bbb个111组成二进制xxx和yyy,并且x−yx-yx−y恰好有kkk个111,并且xxx和yyy不含前导零. 思路: 首先 ...
- Codeforces Round #704 (Div. 2) E. Almost Fault-Tolerant Database 思维
传送门 题意: 给nnn个长度为mmm的数组,要求构造一个长度为mmm的数组,使得这个数组与前面nnn个数组同一位置最多两个元素不同. 思路: 我们为了方便构造,可以先把要构造的数组看成nnn个数组的 ...
- Codeforces Round #772 (Div. 2) C. Differential Sorting(思维+构造)
题目链接 https://codeforces.com/contest/1635/problem/C 题面 题意 给你一个长度为n的数组 a[i]a[i]a[i] ,我们有一种操作让 a[x]=a[y ...
- Codeforces Round #495 (Div. 2) D. Sonya and Matrix[思维构造]
D. Sonya and Matrix 题意:给定t个数,要求构造一个矩阵,以0为中心,以菱形的方法依次+1扩展 思路: 假设0的坐标为(x,y),则有 max=n-x+m-y max已知, n,m枚 ...
- Codeforces Round #704 (Div. 2)-A. Three swimmers-题解
目录 Codeforces Round #704 (Div. 2)-A. Three swimmers Problem Description Input Output Sample Input Sa ...
- Codeforces Round #704 (Div. 2)-C. Maximum width-题解
目录 Codeforces Round #704 (Div. 2)-C. Maximum width Problem Description Input Output Sample Input Sam ...
- Codeforces Round #704 (Div. 2)-B. Card Deck-题解
目录 Codeforces Round #704 (Div. 2)-B. Card Deck Problem Description Input Output Sample Input Sample ...
- Codeforces Round #743 (Div. 2) D. Xor of 3 模拟 + 构造
传送门 文章目录 题意: 思路: 题意: 给你一个010101序列aaa,定义一次操作是选择一个[1,n−2][1,n-2][1,n−2]范围内的下表,将ai,ai+1,ai+2a_i,a_{i+1} ...
- Codeforces Round #268 (Div. 1) C. Hack it! 数位dp + 构造数位
传送门 文章目录 题意: 思路: 题意: 定义f(x)f(x)f(x)表示xxx的十进制下数位和,现在给你aaa,让你选一个区间[l,r][l,r][l,r],满足∑i=lrf(i)moda=0\su ...
- Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维
传送门 文章目录 题意: 思路: 题意: 思路: 直接考虑比较难想,这种公式题基本都是将部分答案看成一个整体,考虑xi,xi+1x_i,x_{i+1}xi,xi+1的贡献的. 假设当前的xi=x, ...
最新文章
- Meta 研发触觉手套助力元宇宙,虚拟世界也可以有触觉
- c语言ascii图形输出,C语言实例10——有关ASCII图形的输出
- 震惊!Canvas原来还能这么搞!代码画一个时钟出来
- java xwork_xwork-core-2.3.4源码 - 源码下载|通讯/手机编程|J2ME|源代码 - 源码中国
- 软件项目组织管理(十)项目沟通管理
- 牵手大企,关于图形计算、HPC与AI,NVIDIA言有尽而意无穷!
- Xilinx实习一年总结
- JqueryUI-1
- HIVE: 自定义TextInputFormat (旧版MapReduceAPI ok, 新版MapReduceAPI实现有BUG?)
- 使用内存硬盘(tmpfs)来加速你的网站
- ADO.NET 【攻击及防御】
- 基于 Spark推荐 系统应用 现 状
- masm32 安装过程(记录)
- seo与sem的区别在哪里
- 按键精灵找图找色找字比色等图色命令失败的通用解决思路
- 人体的基本五行 - 心肝脾肺肾,金木水火土 对应关系与基础解读
- Linux删除其中一行的快捷键,Linux 命令快捷键
- win7旗舰版系统下载
- Java中的深浅拷贝方式
- 罗马数字相加java_LeetCode题库 13罗马数字转整数(java)