这是一篇解题报告

首先,看到标签,考虑二分答案。

我们二分答案(即塔顶的值),把大于或等于这个值的变为1,否则变为0。

很容易发现,如果塔顶的答案是1,那么就说明值可以更大,否则相反。

复制一波样例

  1. 4
  2. 454
  3. 36454
  4. 1637452

因为答案是4,所以我们把3、4、5为答案的情况都拿出来观察一下


  1. 3:
  2. 0
  3. 000
  4. 10000
  5. 1010001
  6. 5:
  7. 1
  8. 111
  9. 10111
  10. 1010111
  11. 4:
  12. 1
  13. 101
  14. 10101
  15. 1010101

很容易想到从左往右一直找,直到找到两个相同的值,并返回这个值。如果没有,那么就看第n项是0还是1,是0则可以,是1则不行

可是会被下面这种情况hack


  1. 1
  2. 011
  3. 00110
  4. 0001100

那么会不会是中间往两边的找到的第一组相等的值呢?

发现没有问题,but

  1. 0
  2. 010
  3. 01010
  4. 0101010
  5. 0
  6. 010
  7. 01010
  8. 0101010
  9. 010101010

可以发现在找不到相同的相邻项时,层数不同,第n项的答案的影响不同。

然后可以发现如果是奇数层,那么塔顶的值就和塔底的第n项相同,否则就不同

然后就做完了qwq

代码如下(注释显示艰辛历程)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n;
  4. int a[400005];
  5. int b[400005];
  6. bool Cheak(int x){
  7. for(int i=1;i<=n*2-1;i++)
  8. b[i]=a[i]>=x;
  9. for(int i=1;i<n;i++){
  10. if(b[n-i]==b[n-i+1])
  11. return b[n-i+1];
  12. if(b[n+i]==b[n+i-1])
  13. return b[n+i-1];
  14. }
  15. if(n&1)
  16. return b[n];
  17. return !b[n];
  18. }
  19. int main(){
  20. cin>>n;
  21. for(int i=1;i<=n*2-1;i++)
  22. scanf("%d",&a[i]);
  23. int l=1,r=2*n-1;
  24. int ans=l;
  25. while(l<=r){
  26. int mid=(l+r)>>1;
  27. if(Cheak(mid))
  28. ans=mid,l=mid+1;
  29. else
  30. r=mid-1;
  31. // printf("%d %d\n",l,r);
  32. }
  33. printf("%d\n",ans);
  34. return 0;
  35. }
  36. /*
  37. 4
  38. 454
  39. 36454
  40. 1637452
  41. 3:
  42. 0
  43. 000
  44. 10000
  45. 1010001
  46. 5:
  47. 1
  48. 111
  49. 10111
  50. 1010111
  51. 4:
  52. 1
  53. 101
  54. 10101
  55. 1010101
  56. 1
  57. 011
  58. 00110
  59. 0001100 qwq hack了
  60. 中间往边?
  61. 0
  62. 100
  63. 11001
  64. 1110011
  65. 中间贡献最大
  66. 如果没有相同?
  67. 1
  68. 101
  69. 10101
  70. 1010101
  71. 0
  72. 010
  73. 01010
  74. 0101010
  75. 看中间是否为1。
  76. 不对qwq
  77. 0
  78. 010
  79. 01010
  80. 0101010
  81. 010101010
  82. 层数变化会改变ans
  83. F**k
  84. */

To_Heart—题解——AT2165的更多相关文章

  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 & ...

随机推荐

  1. gdb 调试,当发现程序退出,需要定位程序退出位置时。

    在进入gdb后设置,执行下面语句 handle SIGSEGV nopass handle SIGSEGV nostop 执行程序,触发问题,gdb侧执行c 故障出现时,执行bt,显示堆栈调用.

  2. RHEL高级磁盘管理—Stratis

    2. Stratis 本地存储管理工具,通过Stratis可以便捷的使用Thin Provisioning.Snapshots.Pool-based的管理和监控等高级存储功能. Stratis 基于x ...

  3. IPMI中sol的使用

    IPMI中sol的使用 转载韦远科 最后发布于2013-05-09 15:19:18 阅读数 7920  收藏   http://blog.chinaunix.net/uid-1838361-id-3 ...

  4. PHP使用mail函数发送邮件

    yum install sendmail #需要使用到sendmail hostname jb51.net #建议修改主机名为域名格式,否则启动sendmail会很慢 systemctl start ...

  5. docker容器中日志文件过大处理方法

    背景 :在日常工作中一个基于centos镜像构建起来的python爬虫程序,日志文件在两个月内到了500G,日志存放在根目录下面,在不扩容的情况下把这个问题给解决掉.通过定时任务和脚本的方法,定期的清 ...

  6. LTP--linux稳定性测试 linux性能测试 ltp压力测试 ltp-pan

    LTP--linux稳定性测试 linux性能测试 ltp压力测试 zhangzj1030关注14人评论33710人阅读2011-12-09 12:07:45   说明:在写这篇文章之前,本人也不曾了 ...

  7. 转载 https://www.cnblogs.com/bobo-pcb/p/11708459.html

    https://www.cnblogs.com/bobo-pcb/p/11708459.html #### 1 用VMware 15.0+win10企业版 1次安装成功 20200124 2 不要用v ...

  8. Centos7 网卡DHCP重新获取IP地址

    问题:局域网内一台linux系统(Centos7.4)DHCP自动获取的IP地址和另一台手动配置的静态IP冲突了 解决方法:让DHCP自动获取的IP地址重新获取一个别的IP地址 DHCP重新获取IP ...

  9. Centos6.9以下查看端口占用情况和开启端口命令

    Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令:   lsof -i tcp:80   列出所有端口   netstat -ntlp   1.开启端口(以80端口为例)     ...

  10. 贪心算法leetcode-763

    int[] lastShow = new int[26]; var list = new LinkedList<Integer>(); for (int i = 0; i < s.l ...