Description

给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个)。

Sample Input

  1. 1 10 1
  2. 2 10 1
  3.  
  4. 1 10 1
  5. 1 10 1
  6.  
  7. 1 10 1
  8. 4 4 1
  9. 1 5 1
  10. 6 10 1

Sample Output

  1. 1 1
  2. no corruption
  3. 4 3

Analysis

我们假装按大小排好了每个数,然后我们发现,如果统计每个数出现的次数,要求的数X是奇数,其他的是偶数,那么记录前缀和,X之前全为偶数(偶+偶+...+偶=偶),X及X以后都是奇数(奇+偶=奇),那我们就可以按照这个规律二分了。

这道题还是蛮有意思的,如果奇数和偶数对掉的话,这道题就不可做了。

Code

  1. #include<set>
  2. #include<map>
  3. #include<queue>
  4. #include<stack>
  5. #include<cmath>
  6. #include<cstdio>
  7. #include<cstring>
  8. #include<iostream>
  9. #include<algorithm>
  10. #define RG register int
  11. #define rep(i,a,b) for(RG i=a;i<=b;++i)
  12. #define per(i,a,b) for(RG i=a;i>=b;--i)
  13. #define ll long long
  14. #define inf 0x8f8f8f8f8f
  15. #define maxn 100005
  16. using namespace std;
  17. ll X[maxn],Y[maxn],Z[maxn],cnt;
  18. char s[maxn];
  19. inline int read()
  20. {
  21. int x=,f=;char c=getchar();
  22. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  23. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  24. return x*f;
  25. }
  26.  
  27. int judge(ll lim)
  28. {
  29. ll sum=;
  30. rep(i,,cnt)
  31. {
  32. if(lim<X[i]) continue;
  33. sum+=(min(Y[i],lim)-X[i])/Z[i]+;
  34. }
  35. return sum&;
  36. }
  37.  
  38. ll cal(ll lim)
  39. {
  40. ll sum=;
  41. rep(i,,cnt)
  42. {
  43. if(lim<X[i]) continue;
  44. sum+=(min(Y[i],lim)-X[i])/Z[i]+;
  45. }
  46. return sum;
  47. }
  48.  
  49. void work()
  50. {
  51. ll l=,r=inf,mid,ans=-;
  52. while(l<=r)
  53. {
  54. mid=(l+r)>>;
  55. if(judge(mid)) ans=mid,r=mid-;
  56. else l=mid+;
  57. }
  58. if(ans==-) puts("no corruption");
  59. else
  60. {
  61. printf("%lld %lld\n",ans,cal(ans)-cal(ans-));
  62. }
  63. }
  64.  
  65. int main()
  66. {
  67. while(gets(s)!=NULL)
  68. {
  69. if(!strlen(s))
  70. {
  71. if(!cnt) continue;
  72. work();cnt=;
  73. }
  74. else
  75. {
  76. ++cnt;
  77. sscanf(s,"%lld %lld %lld",&X[cnt],&Y[cnt],&Z[cnt]);
  78. }
  79. }
  80. if(cnt) work();
  81. return ;
  82. }

Showstopper [POJ3484] [二分] [思维]的更多相关文章

  1. Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)

    Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...

  2. POJ 3484 Showstopper(二分答案)

    [题目链接] http://poj.org/problem?id=3484 [题目大意] 给出n个等差数列的首项末项和公差.求在数列中出现奇数次的数.题目保证至多只有一个数符合要求. [题解] 因为只 ...

  3. codeforces 895B XK Segments 二分 思维

    codeforces 895B XK Segments 题目大意: 寻找符合要求的\((i,j)\)对,有:\[a_i \le a_j \] 同时存在\(k\),且\(k\)能够被\(x\)整除,\( ...

  4. cf1153E 二分思维交互

    恶臭的交互题 /* 一个结论:一个矩形将空间分割成两部分,如果开头结尾都在一个部分内,那么穿过矩形边框的线条数就是偶数,反之就是奇数 通过这个结论来进行判断 先询问999次将两个x坐标确定,方法是询问 ...

  5. LightOJ 1138 Trailing Zeroes (III)(二分 + 思维)

    http://lightoj.com/volume_showproblem.php?problem=1138 Trailing Zeroes (III) Time Limit:2000MS     M ...

  6. BZOJ - 5427:最长上升子序列 (二分&思维)

    现在给你一个长度为n的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值, 使得最长上升子序列最长.(为何最长呢?因为hxy向来对自己的rp很有信心)   Input 第一行一个正整数 ...

  7. codeforces 985 D. Sand Fortress(二分+思维)

    Sand Fortress time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  8. codeforces E. Mahmoud and Ehab and the function(二分+思维)

    题目链接:http://codeforces.com/contest/862/problem/E 题解:水题显然利用前缀和考虑一下然后就是二分b的和与-ans_a最近的数(ans_a表示a的前缀和(奇 ...

  9. codeforces 814 C. An impassioned circulation of affection(二分+思维)

    题目链接:http://codeforces.com/contest/814/problem/C 题意:给出一串字符串然后q个询问,问替换掉将m个字符替换为字符c,能得到的最长的连续的字符c是多长 题 ...

随机推荐

  1. FreeNAS-9.10虚拟机测试安装

     虚拟机安装NreeNAS-9.10步骤 需求:网络监控磁盘要扩容 测试环境: CPU 内存 系统盘 共享盘 网卡 2核 2G 20G 20G 桥接 系统版本:FreeNAS-9.10 一.配置虚拟机 ...

  2. go 闭包程序解读

    package main import "fmt" // 下面这函数就是闭包函数(就是返回一个匿名函数的地址的函数,其中要1.定义一个需要保护的局部变量i 2.一个匿名的函数) , ...

  3. Windows下配置eclipse写WordCount

    1 下载插件 hadoop-eclipse-plugin-2.7.2.jar github上下载源码后需要自己编译.这里使用已经编译好的插件即可 2 配置插件 把插件放到..\eclipse\plug ...

  4. django - 总结 - redis缓存

    八.redis 补充- 操作 - 增删改查 对字典,重新设计结构,增删改查. hmset  keys  hget   scan_iter  hgetall  import redis import j ...

  5. table 表格固定表头和第一列、内容可滚动

    整理了下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  6. Blender 2.78 突然卡顿

    之前一直好好的直到这两天打开就一直延迟半拍,重启重装无效. 解决方法: NVIDIA控制面板→管理3d设置→程序设置→选择blender,更改显卡为集成显卡→应用 亲测有效.

  7. C++中数组作为形参进行传递(转)

    有两种传递方法,一种是function(int a[]); 另一种是function(int *a) 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值! 对于第一种,根据之前所学,形参是实 ...

  8. 你对安卓触控一体机了解多少?视野还停留在windows一体机上?

    android一体机可以根据用户的不同需求拓展各种不同的硬件外接设备和各种应用软件,环境适应能力又强,所以在诸多领域的应用都非常受欢迎,并且还在不断地开拓新市场.安卓系统触摸一体机占据绝对性优势. 1 ...

  9. 【Java编程思想笔记】注解1-简单了解注解

    文章参考:https://www.cnblogs.com/xuningchuanblogs/p/7763225.html https://www.cnblogs.com/xdp-gacl/p/3622 ...

  10. Django部署方法

    Windows方案: Apache2.4 + Django2.0 网上的方法乱七八糟: 那么接下来:最好的方法,不行吃屎. 当前环境是Django2.0+ python35(64bit) 部署原因: ...