AtCoder Regular Contest 127
B
Description
给出\(n(\leq5\times10^4),L(\leq15)\),构造\(3n\)个不同\(L\)位的三进制数,使得在这\(3n\)个数的每一位上,0/1/2各出现\(n\)次。在这样的前提下,使得其中的最大数尽可能小。
Solution
易知最大的\(n\)个数一定是2开头的,那么就令这\(n\)个数为\(200..0_{(3)},200..0_{(3)}+1,...,200..0_{(3)}+n-1\)。
将这些数中的0换成1,1换成2,2换成0,作为最小的\(n\)个数;将这些数中的0换成2,1换成0,2换成1,作为中间的\(n\)个数。
C
Description
对于无前缀零的\(1..2^n(n\leq10^6)\)这些二进制数,将其作为字符串按字典序排列,求第\(x(\leq2^n-1)\)个(\(x\)以二进制给出)。
Solution
考虑这个排列是怎么生成的。按位数将二进制数加入到排列中(新加入的用[]标注):
- 1位:[1]
- 2位:1 [10 11]
- 3位:1 10 [100 101] 11 [110 111]
- 4位:1 10 100 [1000 1001] 101 [1010 1011] 11 110 [1100 1101] 111 [1110 1111]
发现\(i\)位数都是在\(i-1\)位数后插入两个,那么除第一位为1外,一个序列可以分成:一个空串 + \(2^k-1\)个0首串 + \(2^k-1\)个1首串。于是可以递归求解。第\(x\)个串(从0开始)是:
- 空串,当\(x=0\)。
- 0首串中的第\(x-1\)个,当\(x<2^k\)。
- 1首串中的第\(x-2^k\)个,当\(2^k \leq x\)。
递归至多\(n\)次,便可确定每一位的取值。你或许会担心对大数\(x\)进行运算会让复杂度退化到\(O(n^2)\),不过其实是不会的。
判断\(x\)与\(2^k\)的大小只要观察\(x\)的首位;\(x-2^k\)只需移除首位上的1。对于判0操作,可以维护\(x\)中1的数目,若\(x\)中没有1说明\(x=0\)。对于\(x-1\)操作,寻找到最后的1位,将其置0并将后面所有位置1,这一过程中可以维护\(x\)中1的数目。由于\(x-1\)操作最多执行\(n\)次,而第\(k\)位每\(2^k\)次操作中才会被借位一次,且一经借位后方都被置1,使得借位的复杂度大大降低。
Code
//Binary Strings
#include <cstdio>
#include <cstring>
const int N=1e6+10;
int n; char x[N],y[N];
bool equal0()
{
for(int i=n;i>=1;i--) if(x[i]=='1') return false;
return true;
}
void minus1()
{
int k=n;
while(x[k]=='0') k--;
x[k]='0';
for(int i=k+1;i<=n;i++) x[i]='1';
}
int main()
{
scanf("%d",&n);
scanf("%s",x+1);
int m=strlen(x+1);
for(int i=n;i>=1;i--) x[i]=(i-n+m>0)?x[i-n+m]:'0';
for(int i=1;i<=n;i++) y[i]=0;
minus1();
y[1]='1';
for(int k=1;k<=n;k++)
{
if(equal0()) break;
if(x[k]=='0') y[k+1]='0',minus1();
else y[k+1]='1',x[k]='0';
}
puts(y+1);
return 0;
}
AtCoder Regular Contest 127的更多相关文章
- AtCoder Regular Contest 127 题解
sb atcoder 提前比赛时间/fn/fn/fn--sb atcoder 还我 rating/zk/zk/zk A 签到题,枚举位数 \(+\) 前导 \(1\) 个数然后随便算算贡献即可,时间复 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
- AtCoder Regular Contest 094
AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...
- AtCoder Regular Contest 095
AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 096
AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...
随机推荐
- Spring面试复习整理
Spring Spring核心分为三方面: 控制反转(IoC): 就是将创建对象的权利交给框架处理/控制,不需要人为创建,有效降低代码的耦合度,降低了开发成本. 依赖注入(DI): 容器动态地将将某种 ...
- NOIP 模拟五 考试总结
T1string T1开的不错,看到这个题很激动,类似与HEOI2016排序,好像还要更简单一些,于是迅速冲了个桶排.因为洛谷上排序那道题是用桶排水的,所以我觉得没必要打线段树了,极端大数据20秒冲过 ...
- After Effects 图层属性及属性组结构详解
根据结构类型的属性分类 在 After Effects 的脚本开发中,图层的属性可被区分为三种类型:PROPERTY.INDEXED_GROUP 和 NAMED_GROUP .通过使用app.proj ...
- Django实现用户登录注册
本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...
- 洛谷3119 草鉴定(tarjan)
题目大意 约翰有\(n\)块草场,编号\(1\)到\(n\),这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝西总是从\(1\)号草场出发,最后回到\(1 ...
- css3鼠标悬停图片边框线条动画特效
css3鼠标经过内容区时,边框线条特效效果制作. html: <div class="strength grWidth hidden"> <div class ...
- vue3.x全局插件和组件
做vue项目的时候,总有一些小组件或者工具类,我们需要频繁的使用,每个使用的地方再去引用相对比较麻烦,当然也有一些好处,尤其是配合组件异步加载的时候,能最更好的减少项目首次加载的体积,从而优化一些体验 ...
- SpringMvc 中 FrameworkServlet 覆盖 service 的有点。
@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws Se ...
- proto3语法记录
protobuf 是谷歌的语言无关,平台无关,可扩展的,高效的结构化数据序列化机制,比xml和json的序列化的速度更快,此处记录一下 proto3 的语法,防止以后忘记. 注意:proto3 语法需 ...
- pyinstaller和wordcloud和jieba的使用案列
一.pyinstaller库 1.简介 pyinstaller库:将脚本程序转变为可执行(.exe)格式的第三方库 注意:需要在.py文件所在目录进行以下命令,图标扩展名是.ico 2.格式: pyi ...