P9033「KDOI-04」XOR Sum 题解

题目链接

传送门

题意简述

构造一个长度为 \(n\),值域为 \([0,m]\) 的异或和为 \(k\) 的序列,如果不存在则输出 \(-1\)。

题目分析

首先很容易想到,当 \(k \le m\) 的时候,我们仅需要输出一个 \(k\) 剩下的位置全部填 \(0\) 即可。

而当 \(k > m\) 时,我们至少需要两个数,因此在此时判断 \(n\) 是否等于 \(1\),若不等于 \(1\),根据异或不进位原理,我们还需判断 \(k\) 和 \(m\) 的二进制位数关系。设 \(l_k,l_m\) 分别为 \(k,m\) 的二进制位数。

  • 若 \(l_m \le l_k\) 则无解。
  • 反之,我们可以让一个数是 \(2^{l_k}\),此时再构造出 \(k - 2^{l_k}\) 即可,可以证明 \(k - 2^{l_k} \le m\) 因此只需两个数 \(2^{l_k},k-2^{l_k}\) 即可,剩余部位补零。

Codes

  1. //author: yuhang-ren
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. void read(int &p)
  5. {
  6. p = 0;
  7. int k = 1;
  8. char c = getchar();
  9. while (c < '0' || c > '9')
  10. {
  11. if (c == '-')
  12. {
  13. k = -1;
  14. }
  15. c = getchar();
  16. }
  17. while (c >= '0' && c <= '9')
  18. {
  19. p = p * 10 + c - '0';
  20. c = getchar();
  21. }
  22. p *= k;
  23. return;
  24. }
  25. void write_(int x)
  26. {
  27. if(x < 0)
  28. {
  29. putchar('-');
  30. x = -x;
  31. }
  32. if(x>9)
  33. {
  34. write_(x/10);
  35. }
  36. putchar(x%10+'0');
  37. }
  38. void writesp(int x)
  39. {
  40. write_(x);
  41. putchar(' ');
  42. }
  43. void writeln(int x)
  44. {
  45. write_(x);
  46. putchar('\n');
  47. }
  48. int T,n,m,k;
  49. signed main()
  50. {
  51. #if _clang_
  52. freopen("1.in","r",stdin);
  53. freopen("1.out","w",stdout);
  54. #endif
  55. read(T);
  56. for(int t = 1;t<=T;t++)
  57. {
  58. read(n),read(k),read(m);
  59. if(k <= m)
  60. {
  61. writesp(k);
  62. for(int i = 2;i<=n;i++)
  63. {
  64. writesp(0);
  65. }
  66. puts("");
  67. continue;
  68. }
  69. else
  70. {
  71. int l_k = 0,l_m = 0;
  72. int k_ = k;//k后面还需要用到,所以用k_代替k进行运算。
  73. for(;k_;k_>>=1)
  74. {
  75. l_k++;
  76. }
  77. for(;m;m>>=1)
  78. {
  79. l_m++;
  80. }
  81. if(n == 1)
  82. {
  83. writeln(-1);
  84. continue;
  85. }
  86. if(l_k > l_m)
  87. {
  88. writeln(-1);
  89. continue;
  90. }
  91. writesp((1<<(l_k-1)));
  92. writesp((k - (1<<(l_k-1))));
  93. for(int i = 3;i<=n;i++)
  94. {
  95. writesp(0);
  96. }
  97. puts("");
  98. }
  99. }
  100. return 0;
  101. }

P9033题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. forms组件渲染标签、展示信息、校验数据的一些补充,forms组件参数和源码剖析,modelform组件,Django中间

    今日内容 forms组件渲染标签 forms组件渲染标签的方式1 <p>forms组件渲染标签的方式1</p> {{ form_obj.as_p }} {{ form_obj. ...

  2. CSS文字超出宽度---换行总结

     2021-5-5重新总结---CSS文字超出宽度---附代码 <!DOCTYPE html> <html lang="en"> <head> ...

  3. angular Ionic CLI组件建立,使用图标,弹窗,按钮,卡片,列表,无尽滚动,刷新

  4. java入门与进阶P-4.7

    最大公约数 首先做这个题需要先复习几组概念: 如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数.几个整数中公有的约数,叫做这几个数的公约数:其中最大的一个,叫做这几个数的最大公约数.举例: 1 ...

  5. 跟着廖雪峰学python 003

    ​ ​编辑 列表和元组 list 是一种有序.可变的数据类型,可添加删除其中的元素. len()函数:可以获取列表元素的个数 classmates = ['Micheal' , 'Bob' , 'Ja ...

  6. 【HMS Core】使用机器学习服务和搜索服务识别植物

    ​1.介绍 总览 机器学习服务(ML Kit)为开发者提供简单易用.服务多样.技术领先的机器学习能力,助力开发者更快更好地开发各类AI应用.同时,搜索服务(Search Kit)通过端侧SDK和云侧A ...

  7. 淘宝首页数据采集之js采集

    搜索页面采集,数据在控制台哦!!! 搜索页面采集,数据在控制台哦!!! 搜索页面采集,数据在控制台哦!!! 既然能打到控制台,当然也能传到系统!!! 既然能打到控制台,当然也能传到系统!!! 既然能打 ...

  8. 基于APIView&ModelSerializer写接口

    目录 基于APIView&ModelSerializer写接口 一.首先准备前提工作 1.模型代码 2.路由代码 3.视图代码 二.继承Serializer序列化定制字段的三种方法 1.通过s ...

  9. 跳板攻击之:EarthWorm代理转发

    跳板攻击之:EarthWorm代理转发 目录 跳板攻击之:EarthWorm代理转发 1 EarthWorm官方介绍 2 官方使用方法: 2.1 环境 2.2 正向 SOCKS v5 服务器 2.3 ...

  10. 在 WXML 中使用 JS 代码

    {{}} 里面可以写任何的 JS 表达式,(一定是表达式,例如定义函数等都不属于表达式).例如,下面是在 wxml 中使用 JS 表达式: <view class="price tex ...