题目大意:

已知三个$n$位二进制数$A$,$B$,$C$.

满足:

$A+B=C$

它们二进制位中$1$的个数分别为$a$,$b$,$c$.

求满足条件的最小的$C$.

Solution

唉,又是一道随缘猜结论的题,可惜极限数据卡掉了我一个点,开大数组就A了.....

通过$n \leq 10$的打表,我们发现所有的最优解中都有一种情况是$A$的二进制位的$1$是连续一段。

事实上,真的就是这样的!

设$t=a+b-c$,显然,$t$表示加法过程中进位的次数。

我们设$A$的$a$个$1$是连续的,然后在$B$中添加$b$个$1$,使得其刚好进位了$t$次(这里$a$个一后面可能有后导$0$)。

然后要分两种情况讨论。

$1.a\geq t$

$A:00001111\cdots11$

那么$B$在填$1$的时候,就不能填在$A$中最后一个$1$的位置,因为那样进位次数就会超过$t$.

所以第一个$1$应该填在这里,且$B$的前面也只能是$0$,否则相加时还会继续进位:

$A:0000\underbrace{111\cdots1}_{t}1111\cdots$

$B:$      $0$            $10000\cdots$

那么,剩下的那些$1$,就可以填在中间的位置,直到填满为止,这样就保证了$C$的尽量小。

如果中间还没填满,那就可以完事了。

接着考虑中间填满的情况,而且$B$中还有$1$没填:

$A:0000\underbrace{11111\cdots1}_{t}1111\cdots$

$B:$       $011111\cdots10000\cdots$

这里$B$还有两种可以填的地方,前面或后面。

事实上,通过推一推式子,我们发现剩下的$1$放在$B$的后面,然后$A$的后面补$0$才可以使$C$最小。

具体来说,就是设$x$为$B$中放后面的$1$的个数,然后求出$C$关于$x$的函数$f(x)$,然后发现$x$越大,$C$就越小,因此应该剩下的$1$全放在后面。

举个例子,$a=4,b=4,c=6,t=2$,构造出来应该是这样的:

$A:0111100$

$B:0110011$

$C:1101111$

$2.a<t$

这时为了使进位次数刚好为$t$次,所以$B$的首个$1$应填在$A$中最后一个$1$的位置。

然后为凑齐$t$次,还得在前面补$1$,像这样:

$A:000\cdots011111\cdots11$

$B:0000111\cdots000\cdots1$

接下来的话同理,$B$中剩下的$1$先填在中间的空位,若未填满则结束,否则$1$放在后面,同时$A$在后面补$0$。

当然,代码就很好写(毒瘤)了:

#include<bits/stdc++.h>
#define N 200010
using namespace std;
int n,a,b,c,t,ans[N],A[N],B[N];
void solve()
{
if(t>a)
{
if(t>=b)
{
for(int i = ;i<=a;i++)A[i] = ;
for(int i = ;i<=c;i++)B[i] = ;
for(int i = a+;i<=t;i++)B[i] = ;
}else
{
for(int i = ;i<=b;i++)B[i] = ;
for(int i = b-t+;i<=c;i++)A[i] = ;
}
}else
{
if(t>=b)
{
for(int i = ;i<=a;i++)A[i] = ;
for(int i = a-t+;i<=c;i++)B[i] = ;
}else
{
int x = b-t;
for(int i = x+;i<=c;i++)A[i] = ;
for(int i = ;i<=x;i++)B[i] = ;
for(int i= c-t+;i<=c;i++)B[i] = ;
}
}
for(int i = ;i<=n;i++)
{
ans[i]+=A[i]+B[i];
if(ans[i]>)ans[i]-=,ans[i+]++;
}if(ans[n+])puts("-1"),exit();
for(int i = n;i>=;i--)printf("%d",ans[i]);
}
int main()
{
scanf("%d%d%d%d",&n,&a,&b,&c);
t = a+b-c;
solve();
return ;
}

2019.08.06模拟赛T2的更多相关文章

  1. 2019.11.11 模拟赛 T2 乘积求和

    昨天 ych 的膜你赛,这道题我 O ( n4 ) 暴力拿了 60 pts. 这道题的做法还挺妙的,我搞了将近一天呢qwq 题解 60 pts 根据题目给出的式子,四层 for 循环暴力枚举统计答案即 ...

  2. ZROI 19.08.06模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. 今天正睿又倒闭了,从删库到跑路. 天祺鸽鸽txdy! A "不要像个小学生一样一分钟就上来问东西."--蔡老板 虽 ...

  3. 模拟赛T2 交换 解题报告

    模拟赛T2 交换 解题报告 题目大意: 给定一个序列和若干个区间,每次从区间中选择两个数修改使字典序最小. \(n,m\) 同阶 \(10^6\) 2.1 算法 1 按照题意模拟,枚举交换位置并比较. ...

  4. ZROI 19.08.07模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "正睿从来没有保证,模拟赛的题目必须原创." "文案不是我写的,有问题找喵老师去."--蔡老师 ...

  5. 【2019.10.7 CCF-CSP-2019模拟赛 T2】绝对值(abs)(线段树细节题)

    找规律 设\(p_i=a_{i+1}-a_i\),则答案就是\(\sum_{i=1}^{n-1}p_i\). 考虑若将\(a_i\)加上\(x\)(边界情况特殊考虑),就相当于是将\(p_{i-1}\ ...

  6. 【2019.8.20 NOIP模拟赛 T2】小B的树(tree)(树形DP)

    树形\(DP\) 考虑设\(f_{i,j,k}\)表示在\(i\)的子树内,从\(i\)向下的最长链长度为\(j\),\(i\)子树内直径长度为\(k\)的概率. 然后我们就能发现这个东西直接转移是几 ...

  7. 【2019.8.15 慈溪模拟赛 T2】组合数(binom)(卢卡斯定理+高维前缀和)

    卢卡斯定理 题目中说到\(p\)是质数. 而此时要求组合数向质数取模的结果,就可以用卢卡斯定理: \[C_x^y=C_{x\ div\ p}^{y\ div\ p}\cdot C_{x\ mod\ p ...

  8. 【2019.8.6 慈溪模拟赛 T2】树上路径(tree)(Trie)

    从暴力考虑转化题意 考虑最暴力的做法,我们枚举路径的两端,然后采用类似求树上路径长度的做法,计算两点到根的贡献,然后除去\(LCA\)到根的贡献两次. 即,设\(v_i\)为\(i\)到根路径上的边权 ...

  9. 【2019.8.7 慈溪模拟赛 T2】环上随机点(ran)(自然算法)

    简单声明 我是蒟蒻不会推式子... 所以我用的是乱搞做法... 大自然的选择 这里我用的乱搞做法被闪指导赐名为"自然算法",对于这种输入信息很少的概率题一般都很适用. 比如此题,对 ...

随机推荐

  1. Solr实现全文搜索

    1.1 Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展 ...

  2. [20191127]探究等待事件的本源4.txt

    [20191127]探究等待事件的本源4.txt --//昨天使用ash_wait_chains.sql脚本把各个生产库执行1遍,才发现我对一套系统性能理解错误.--//我一直以为这套系统存储有点问题 ...

  3. Centos手动安装PHP

    下载PHP的源码,我下的是7.2版本,看了一下安装的参数太多了,也没有时间依次了解每个参数的意思,直接从网上复制了一个,先尝试安装起来.并记录一下步骤,基本的步骤就是解压.配置.编译.运行.1.下载P ...

  4. Mysql模式匹配两种方法

    一.使用LIKE或NOT LIKE比较操作符 使用 "_" 匹配任何单个字符,而 "%" 匹配任意数量的字符(包括零字符): 例如: 1.要想找出以“b”开头的 ...

  5. 选择IT公司的雇主提问

    做为IT从业人员,我们去一家公司时,判断一家公司的专业性时,可以通过以下提问获得反馈: 技术问题 1.这个项目使用了哪些技术(语言,框架,库)?2.应用程序是一体化架构还是微服务架构?3.采用了哪些设 ...

  6. C# WPF 解决方案MineRealms启动器 自动随机播放音乐的代码

    //Nothing //Nothing string[] files = Directory.GetFiles(Path.GetDirectoryName(App.config.MainConfigP ...

  7. table+分页+模糊查询

    这个分页超级棒嘞. 网页链接:http://www.cssmoban.com/cssthemes/7528.shtml

  8. Web安全测试学习笔记-DVWA-CSRF

    CSRF(Cross-site request forgery)跨站请求伪造,CSRF的原理简单来说就是攻击者以用户的名义对服务器发起请求,从而达到攻击目的.与XSS不同之处在于,XSS是盗取用户co ...

  9. RabbitMQ与Spring的框架整合之Spring Cloud Stream实战

    1.RabbitMQ与Spring Cloud Stream整合实战.SpringCloud Stream整体结构核心概念图,如下所示: 图示解释:Outputs输出,即消息的发送端.Inputs输入 ...

  10. (转)Skyline timeseries异常判定算法

    原文链接:https://jiroujuan.wordpress.com/2013/10/09/skyline-anomalous-detect-algorithms/ Skyline内部提供了9个预 ...