因为只有std,没有自我实现,所以是无码专区

主要是为了训练思维能力

solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dls的实现不太一样。

std可能也会带有博主自己的注释。

problem

多组数据,给定 n,mn,mn,m,构造一个 n+mn+mn+m 长度的 01 串。

  • 包含 nnn 个 111,mmm 个 000。
  • 将这个串看成二进制数后能被 333 整除。
  • 没有前导零,即高位第一位必须为 111。

分别输出字典序最大和最小的符合条件的 01 串。不存在就输出 -1

T≤100,n,m≤1e5T\le 100,n,m\le 1e5T≤100,n,m≤1e5


我的想法

observation:二进制相邻两位若都是 111,则这两个位代表的 222 的幂的和一定是 333 的倍数。

证明:2i+2i−1=(2+1)⋅2i−1=3k2^i+2^{i-1}=(2+1)·2^{i-1}=3k2i+2i−1=(2+1)⋅2i−1=3k。

如果 nnn 为偶数。

  • 字典序最大一定是形如 1111...100...000

  • 字典序最小第一时间肯定会以为是 00...011..11 ,但是要求不能出现前导零。所以第一位固定为 111 后,其代表的幂次,2i2^i2i 取模 333 一定是 1/21/21/2。

    • 如果取模是 111,那么只需要某一位也为 111【2k≡2(mod3)2^k\equiv 2\pmod 32k≡2(mod3)】就又可以凑成倍数。形如 100...0010...0111..1111
    • 如果取模是 222,那么只需要第一位也为 111就凑成倍数,形如 100..0011..111

如果 nnn 为奇数。

  • 字典序最大。

    肯定也是前面一堆连续的 111,然后最后面的 333 个数的幂次都是取模为 111。

    形如 111..10..01..0100...00(最前面的连续 111 段长度肯定也是奇数)。

  • 字典序最小。

    首位是 111 没得跑。肯定也是后面一堆连续的 111,然后最前面的 333 个数的幂次都是取模为 111。

    形如 10...00010...010...011111...11(最后面的连续 111 段长度得是奇数)。

显然,偶数一定是有解的。奇数就不一定了,因为可能 111 个数不够。


solution

简单的讨论。

如果只有一个 111, 或者 111 的个数为奇数, 但 000 的个数不超过 111, 那么无解。

  • 只有一个 111, 显然无解。
  • 如果 111 的个数为奇数, 000 的个数是 000 个, 那么一定是 1111...111 这样, 无解。
  • 如果 111 的个数为奇数, 000 的个数是 111 个, 那么相当于 1111...1111 减去一个 111, 但是 1111...11111111...11111111...1111 模三余 000, 减去一个 111 之后模三不等于 000,所以无解。

如果 nnn 是偶数, 那么最大值一定是 1111000000 这样, 最小值首先放一个 111, 最后放 n−2n-2n−2 个 111,剩下的一个 111 用来和 第一个 111 之间放偶数个 000 保证能被 333 整除。

如果 nnn 是奇数,那么首先放 n−3n-3n−3 个 111,这部分能被 333 整除,然后放 10101,然后放若干个 000。最小值同理,开头放一个 111,末尾放 n−3n-3n−3 个 111,中间放 101,保证 1101 中间有奇数个 000,这样前半部分也被整除了。

时间复杂度 O(n)O(n)O(n)。


std

#include <bits/stdc++.h>
using namespace std;string mul(string a, int b) {string c;for (int i = 0; i < b; i++)c += a;return c;
}
string mx, mn;int main() {freopen("binary.in", "r", stdin);freopen("binary.out", "w", stdout);int T;scanf("%d", &T);while (T--) {int n, m;scanf("%d%d", &n, &m);if (n <= 1 || (n % 2 == 1 && m <= 1)) {mx = "-1";mn = "-1";} else {if (n % 2 == 0)mx = mul("1", n) + mul("0", m);elsemx = mul("1", n - 2) + "0101" + mul("0", m - 2);if (n % 2 == 0)mn = "1" + mul("0", m / 2 * 2) + "1" + mul("0", m % 2) + mul("1", n - 2);elsemn = "1" + mul("0", m / 2 * 2 - 1) + "101" + mul("0", m % 2) + mul("1", n - 3);}printf("%s\n%s\n", mx.c_str(), mn.c_str());}
}

【无码专区5】01串(大讨论+构造)相关推荐

  1. 【无码专区11】异或2(结论 / 推式子 + 哈希hash + 大整数高精度 加减乘除重载考察)

    本题已自我实现.但仍归于无码专区 problem 求 ∑i=1n−1i⨁(n−i)\sum_{i=1}^{n-1}i\bigoplus (n-i)∑i=1n−1​i⨁(n−i). 20%,n≤1e6; ...

  2. 【无码专区10】第K大查询(双向链表 /主席树+st表)

    已自我实现,但还是归入无码专区序列.哈哈哈哈哈 对于my idea部分,我的每一个想法都实现了,可供参考. problem 给定一个 1∼n1\sim n1∼n 的排列和 kkk,求所有 r−l+1≥ ...

  3. 【无码专区1】简单路径的第二大边权(启发式合并+最小生成树)

    只有std,没有自我实现,所以叫做无码专区 description 给一张无向图,多次询问,每次询问两个点之间所有简单路径(不重复经过点)中边权第二大(不是严格第二大)的权值的最小值. 数据范围:10 ...

  4. 【无码专区8】三角形二维数点——计数有多少个给定点落在三角形区域内

    因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...

  5. 【无码专区7】括号序列(思维)

    因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...

  6. 【无码专区13】最小公倍数(线段树)

    因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 my idea顾名思义,记录了我的整个思维过程,以及自己部分实现细节口胡,还有期望分数 solution才是dls正解,但是因为只 ...

  7. 【无码专区6】球与盒子(数学线性筛)

    因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...

  8. 【无码专区12】子集和(背包dp)

    此题已自我实现,但仍归于无码专区 本题在考场上就过了,所以难度并不高,发现性质即可. problem 有 nnn 个正整数 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,... ...

  9. 【无码专区9】序列统计(带权并查集 + 前缀和建边 + dp)

    因为只有std,没有自我实现,所以是无码专区 主要是为了训练思维能力 solution才是dls正解,但是因为只有潦草几句,所以大部分会有我自己基于正解上面的算法实现过程,可能选择的算法跟std中dl ...

最新文章

  1. 激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
  2. LTE voice centric和data centric
  3. KeyError: [] not found in axis_高调又有质感,女星最爱的至IN单品原来是它!
  4. char-embedding是如何输入到模型的
  5. mysql指数函数_SQL语言参考大全的目录
  6. javascript运算符_JavaScript中的按位运算符
  7. UE3 GPU性能和分析
  8. Redis精进:List的使用和应用场景
  9. 微信开发者工具构建npm
  10. linux模拟gps,Android之GPS研究(实战篇二)
  11. 用excel制作双层饼图_excel双层饼图怎么做
  12. Word如何让样式库中的样式不添加到自动生成的目录中
  13. android4能用otg吗,小米4支持OTG吗?小米4手机的OTG功能怎么用?
  14. css样式的灵异事件
  15. 编程求E1+E2+…+E100的值​
  16. 第四章#4.3哈夫曼树以及案例介绍
  17. 关于NS3中各个WifiRemoteStationManager(二)
  18. Barracudanbsp;VSnbsp;antelope
  19. abaqus python实例_abaqus Python实例-操作excel文件
  20. 摩拜创始人退出,ofo陷困境,哈罗会成为最大受益者么?

热门文章

  1. 专为小机械迷而造,培养STEM思维,千万别错过!物理机械力学知识边玩边学,5岁以上请入手...
  2. 5道谷歌面试题:即使是天才也要怀疑自己能力了(附答案)
  3. 掌握这四点核心思想,统计学才算入门
  4. python csv文件读取行列_使用Numpy读取CSV文件,并进行行列删除的操作方法
  5. oracle clob 查询换行,sqoop clob从Oracle导入到hive   回车换行导致记录增多
  6. 爬取猎聘python_爬取猎聘大数据岗位相关信息--Python
  7. python将列表的第一列删除_python列表基本操作:索引(访问),切片,扩展,删除,追加,统计,长度,获取下标等...
  8. 算法设计与分析——动态规划——石子合并问题
  9. [JavaWeb]web相关概念回顾
  10. C++vector容器-互换容器