Portal

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的更多相关文章

  1. AtCoder Regular Contest 127 题解

    sb atcoder 提前比赛时间/fn/fn/fn--sb atcoder 还我 rating/zk/zk/zk A 签到题,枚举位数 \(+\) 前导 \(1\) 个数然后随便算算贡献即可,时间复 ...

  2. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  3. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  4. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  5. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

  6. AtCoder Regular Contest 094

    AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...

  7. AtCoder Regular Contest 095

    AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...

  8. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

  9. AtCoder Regular Contest 096

    AtCoder Regular Contest 096 C - Many Medians 题意: 有A,B两种匹萨和三种购买方案,买一个A,买一个B,买半个A和半个B,花费分别为a,b,c. 求买X个 ...

随机推荐

  1. 计算机网络-4-1-2-分类的IP地址

    有关IP最重要的文档就是互联网的正式标准RFC 791 IP地址及其表示方法 整个互联网就是一个单一,抽象的网络,IP地址就是给互联网上的每一台主机(或者路由器)的每一个接口分配一个在全世界范围内都是 ...

  2. JDK源码阅读:String类阅读笔记

    String public final class String implements java.io.Serializable, Comparable<String>, CharSequ ...

  3. mysql学习教程之mysql管理

    MySQL 管理 启动及关闭 MySQL 服务器 Windows 系统下 在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录. 启动: cd c:/mysq ...

  4. 基于python的pixiv爬虫

    基于python的pixiv爬虫 1.目标 在和朋友吹逼过程中,聊到qq群机器人,突发奇想动手做一个p站每日推荐色图的色图机,遂学习爬虫. 目标: 批量下载首页推荐色图. 由于对qq机器人不熟,先利用 ...

  5. Apache Dubbo理解和应用

    官网:https://dubbo.apache.org/ slogan:高性能.轻量级的开源Java RPC框架 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和 ...

  6. springMVC上传和下载附件

    上传: 导入需要的jar包:Spring MVC类库 + 文件上传下载需要的JAR包,图中A处为文件上传下载需要的JAR包,其余为Spring MVC类库. 构建领域模层:model层和control ...

  7. PTA数据结构 习题2.1 简单计算器 (20分)

    习题2.1 简单计算器 (20分) 模拟简单运算器的工作.假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算. 输入格式: 输入在一行中给出一个四则运算 ...

  8. Visual Studio 安装 C++

    Visual Studio 安装 C++

  9. 【UE4】GamePlay架构

    新标签打开或者下载看大图 更新: 增加 编程子系统 Subsystem 思维导图 Character pipeline

  10. Spring Authorization Server的使用

    Spring Authorization Server的使用 一.背景 二.前置知识 三.需求 四.核心代码编写 1.引入授权服务器依赖 2.创建授权服务器用户 3.创建授权服务器和客户端 五.测试 ...