原题网址

https://codeforces.com/contest/1492/problem/D

题目大意

给定a,b,k,求x,y使得x和y的二进制表示都恰有a个0和b个1,且不能使用开头的0。另外,还要求x-y的二进制表示恰有k个1。如果不存在x,y输出No,否则输出x和y的二进制表示。

解题思路

此题为构造性问题。

注意到10000-00001=01111(1个1和p个0生成p个1),11110-01111=01111(1个0和p个1生成p个1),我们可以解决该题。

首先若k=0,肯定有解,只要x和y相等即可。

k>0时,若没有0或只有1个及以下的1,肯定无解。因为x和y开头必须是1,剩下的里面必须0和1都有才可能有解。

k>0,有1个以上1且有0时,考虑x=11110000和y=11100010。首先,x把1都放前面,0都放后面;y在x基础上把最右侧1往右移动位置。这样每移动一位,x-y就会多出一个1。最多得到a个1。即k<=a时有解。

若k>a,则最后一个1已经无处可移动了,得到x=11110000和y=11100001。我们还能把最左侧0往左移动位置。这样每移动一位,x-y还会再多出一个1。因为最高位的1不能越过,还有一个1已经在最低位了,这样最多移动b-2次。所以k<=a+b-2时有解。

其他情况无解。

一般情况下想到的都是多少个1后面放多少个0这种直接构造解的方法。但是这题用先构造一个特殊解,然后交换适当位置得到新解的方法更方便。

我的代码

#include <bits/stdc++.h>

using namespace std;

int main() {
int a, b, k;
string x, y;
ios::sync_with_stdio(false);
cin >> a >> b >> k;
if (k > 0 && (a == 0 || b == 1)) {
cout << "No\n";
return 0;
}
for (int i = 0; i < b; ++i) {
x.push_back('1');
y.push_back('1');
}
for (int i = 0; i < a; ++i) {
x.push_back('0');
y.push_back('0');
}
if (k <= a) {
swap(y[b - 1], y[k + b - 1]);
cout << "Yes\n" << x << endl << y;
return 0;
}
if (k <= a + b - 2) {
swap(y[b - 1], y[a + b - 1]);
swap(y[b - 1], y[b - 1 - (k - a)]);
cout << "Yes\n" << x << endl << y;
return 0;
}
cout << "No\n";
return 0;
}

Codeforces 1492D、Genius's Gambit的更多相关文章

  1. CodeForces 22、23部分题解

    CodeForces 22A 找严格第二小的...注意只有一种情况,可以sort排序然后unique输出. int a[N]; int main() { int n; while(~scanf(&qu ...

  2. 第六周周赛——AK机会不易得,好好把握题解(出自HDU5650,codeforces 616A,624A,659A,655A,658A)

    A题: A题题目链接 题目描写叙述: 位运算 TimeLimit:1000MS  MemoryLimit:65536KB 64-bit integer IO format:%I64d Problem ...

  3. Codeforces Round#704 Div2 题解(A,B,C,D,E)

    FST ROUND !!1 A Three swimmers: 直接整除一下向上取整就好了: #include <bits/stdc++.h> using namespace std; t ...

  4. 2017年暑假ACM集训日志

    20170710: hdu1074,hdu1087,hdu1114,hdu1159,hdu1160,hdu1171,hdu1176,hdu1010,hdu1203 20170711: hdu1231, ...

  5. 斯坦福NLP课程 | 第1讲 - NLP介绍与词向量初步

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  6. GAMBIT、ICEM、HYPERMESH耦合面的处理方法

    前两天在论坛里碰到有朋友问关于使用fluent仿真流固耦合,使用hypermesh作为前处理时的耦合面的方法,刚好今天有点时间,借此机会总结一下GAMBIT.ICEM和HYPERMESH这三款软件作为 ...

  7. HDU 3333 | Codeforces 703D 树状数组、离散化

    HDU 3333:http://acm.hdu.edu.cn/showproblem.php?pid=3333 这两个题是类似的,都是离线处理查询,对每次查询的区间的右端点进行排序.这里我们需要离散化 ...

  8. codeforces 651C(map、去重)

    题目链接:http://codeforces.com/contest/651/problem/C 思路:结果就是计算同一横坐标.纵坐标上有多少点,再减去可能重复的数量(用map,pair存一下就OK了 ...

  9. Codeforces Round #257 (Div. 1)449A - Jzzhu and Chocolate(贪婪、数学)

    主题链接:http://codeforces.com/problemset/problem/449/A ------------------------------------------------ ...

  10. 主席树[可持久化线段树](hdu 2665 Kth number、SP 10628 Count on a tree、ZOJ 2112 Dynamic Rankings、codeforces 813E Army Creation、codeforces960F:Pathwalks )

    在今天三黑(恶意评分刷上去的那种)两紫的智推中,突然出现了P3834 [模板]可持久化线段树 1(主席树)就突然有了不详的预感2333 果然...然后我gg了!被大佬虐了! hdu 2665 Kth ...

随机推荐

  1. C#开发的线程池和管理器 - 开源研究系列文章

    上次编写了一个小软件,用于练手及自己的一个小工具集合.今天把其中的线程池和管理器的代码抽取出来,写成一个博文,让需要的朋友能够进行学习和应用. 这个线程管理器包括了3个类库和一个应用程序,见下图: 第 ...

  2. [生命科学] 生物基础实验之PCR验证

    生物基础实验之PCR验证 文章目录 生物基础实验之PCR验证 实验步骤一 实验步骤二 实验步骤三 配胶 实验步骤四 电泳 实验步骤五 跑胶 实验步骤一 在离心管加入7.5μL Master Mix 溶 ...

  3. [深度学习] tf.keras入门2-分类

    目录 Fashion MNIST数据库 分类模型的建立 模型预测 总体代码 主要介绍基于tf.keras的Fashion MNIST数据库分类, 官方文档地址为:https://tensorflow. ...

  4. Matplotlib 绘制折线图

    Matplotlib matplotlib: 最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建 绘制折线图 绘制两小时的温度变化 from matpl ...

  5. obj转换为gltf方法three.js一步一步来--性能优化超厉害的!!!!!超赞操作!!!Obj模型转Gltf模型并超强压缩!!!!!

    1.准备好模型文件table.obj和table.mtl 2.下载obj2gltf 下载地址https://github.com/AnalyticalGraphicsInc/obj2gltf 解压至文 ...

  6. angular配置多个系统 配置动态路由,缩短模块初次加载时间,快速打开界面,优化用户访问体验

    1.配置一个文件,返回系统名称 2.配置routes-routing.module.ts 引入文件 const system = 服务.getsystem() const allROUTES: {UR ...

  7. 同时打开多个.exe文件怎么解决

    同时打开多个.exe文件怎么解决 小黑最近遇到一个问题,就是Unity封装好用来直接打开.exe的函数不好用了!! 怎么解决? 于是发现了.bat文件!好用至极啊 前提 小黑是征求过客户同意之后才这么 ...

  8. Go使用协程批量获取数据,加快接口返回速度

    服务端经常需要返回一个列表,里面包含很多用户数据,常规做法当然是遍历然后读缓存. 使用Go语言后,可以并发获取,极大提升效率. 使用channel package main import ( &quo ...

  9. 五、pycharm的安装与基本使用

    目录 一.pycharm的安装 1.软件介绍 2.正版安装 1.下载软件 2.安装软件 3.其他方法安装(需要先下载相关资源) ①无限试用法 ②傻瓜式激活法 ③淘宝购买 二.pycharm软件的使用 ...

  10. RESTful相关信息整理

    RESTful相关信息整理 参考:可以看的出来我是阮一峰的忠实读者 阮一峰的<理解RESTful架构> https://www.ruanyifeng.com/blog/2011/09/re ...