原题链接:https://codeforces.ml/contest/1492/problem/D

目录

  • 题意
  • 分析
  • Code

题意

给出a个0和b个1组成两个二进制串x、y,要求满足:

  1. x - y 的二进制中1的个数为k个
  2. x大于y
  3. x和y都没有前导零

分析

这题有很多特判的细节,提前说一下。

  1. 因为是x大于y,因此我们直接把x串设置成111…1000…的形式
  2. 当a为0或b为1时,k只要不是0就输出NO
  3. 当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 思维+构造相关推荐

  1. 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不含前导零. 思路: 首先 ...

  2. Codeforces Round #704 (Div. 2) E. Almost Fault-Tolerant Database 思维

    传送门 题意: 给nnn个长度为mmm的数组,要求构造一个长度为mmm的数组,使得这个数组与前面nnn个数组同一位置最多两个元素不同. 思路: 我们为了方便构造,可以先把要构造的数组看成nnn个数组的 ...

  3. 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 ...

  4. 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枚 ...

  5. Codeforces Round #704 (Div. 2)-A. Three swimmers-题解

    目录 Codeforces Round #704 (Div. 2)-A. Three swimmers Problem Description Input Output Sample Input Sa ...

  6. Codeforces Round #704 (Div. 2)-C. Maximum width-题解

    目录 Codeforces Round #704 (Div. 2)-C. Maximum width Problem Description Input Output Sample Input Sam ...

  7. Codeforces Round #704 (Div. 2)-B. Card Deck-题解

    目录 Codeforces Round #704 (Div. 2)-B. Card Deck Problem Description Input Output Sample Input Sample ...

  8. 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} ...

  9. 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 ...

  10. Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维

    传送门 文章目录 题意: 思路: 题意: 思路: 直接考虑比较难想,这种公式题基本都是将部分答案看成一个整体,考虑xi,xi+1x_i,x_{i+1}xi​,xi+1​的贡献的. 假设当前的xi=x, ...

最新文章

  1. Meta 研发触觉手套助力元宇宙,虚拟世界也可以有触觉
  2. c语言ascii图形输出,C语言实例10——有关ASCII图形的输出
  3. 震惊!Canvas原来还能这么搞!代码画一个时钟出来
  4. java xwork_xwork-core-2.3.4源码 - 源码下载|通讯/手机编程|J2ME|源代码 - 源码中国
  5. 软件项目组织管理(十)项目沟通管理
  6. 牵手大企,关于图形计算、HPC与AI,NVIDIA言有尽而意无穷!
  7. Xilinx实习一年总结
  8. JqueryUI-1
  9. HIVE: 自定义TextInputFormat (旧版MapReduceAPI ok, 新版MapReduceAPI实现有BUG?)
  10. 使用内存硬盘(tmpfs)来加速你的网站
  11. ADO.NET 【攻击及防御】
  12. 基于 Spark推荐 系统应用 现 状
  13. masm32 安装过程(记录)
  14. seo与sem的区别在哪里
  15. 按键精灵找图找色找字比色等图色命令失败的通用解决思路
  16. 人体的基本五行 - 心肝脾肺肾,金木水火土 对应关系与基础解读
  17. Linux删除其中一行的快捷键,Linux 命令快捷键
  18. win7旗舰版系统下载
  19. Java中的深浅拷贝方式
  20. 罗马数字相加java_LeetCode题库 13罗马数字转整数(java)

热门文章

  1. 从单个静止图像进行 3d 深度重建(论文2007)
  2. 什么是CMMI认证?有什么好处?
  3. 渗透测试-内网信息收集
  4. Java练习题(String)
  5. 纪念自己初中的住宿生活
  6. VS2017和VS2019(社区版)离线激活方式
  7. vue html实例,一个页面上多个Vue实例
  8. Java中Math类常用方法
  9. 最新Java全套开发视频教程
  10. R 修改安装包默认存放位置的方法