描述

给定一个长度为 n 的非负整数序列 a[1..n]

你需要求有多少个非负整数 S 满足以下两个条件:

(1).0 ≤ S < 2^60

(2).对于所有 1 ≤ i < n ,有 (a[i] xor S) ≤ (a[i+1] xor S)

输入

第一行一个正整数 n

第二行 n 个非负整数表示序列 a[1..n]

1 ≤ n ≤ 50

0 ≤ a[i] < 2^60

输出

一个非负正数,表示答案

样例输入

  1. 3
  2. 1 2 3

样例输出

  1. 288230376151711744
    分析:二进制,对每一位单独处理.比较大小先找不同的最高位,设分别为x1,x2.如果x1=1,x2=0,那么S的这一位必须是1,如果x1=0,x2=1,那么这一位必须是0,处理一下看有没有矛盾,没有矛盾的乘法原理解决.
  1. #include <cstdio>
  2. #include <cmath>
  3. #include <queue>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. typedef long long ll;
  11.  
  12. ll n, a[], f[][], xianzhi[], ans, maxn;
  13. bool flag = true;
  14.  
  15. ll qpow(ll a, ll b)
  16. {
  17. ll res = ;
  18. while (b)
  19. {
  20. if (b & )
  21. res *= a;
  22. a *= a;
  23. b >>= ;
  24. }
  25. return res;
  26. }
  27.  
  28. int main()
  29. {
  30. memset(xianzhi, -, sizeof(xianzhi));
  31. for (int i = ; i <= ; i++)
  32. xianzhi[i] = -;
  33. scanf("%lld", &n);
  34. for (int i = ; i <= n; i++)
  35. scanf("%lld", &a[i]);
  36. for (int i = ; i <= n; i++)
  37. {
  38. int pos = ;
  39. ll temp, x1, x2;
  40. for (int j = ; j >= ; j--)
  41. {
  42. temp = ( << (j - )), x1 = , x2 = ;
  43. if (temp & a[i - ])
  44. x1 = ;
  45. if (temp & a[i])
  46. x2 = ;
  47. if (x1 != x2)
  48. {
  49. pos = j;
  50. break;
  51. }
  52. }
  53. if (pos == )
  54. continue;
  55. if (x1 > x2)
  56. {
  57. if (xianzhi[pos] == -)
  58. xianzhi[pos] = ;
  59. if (xianzhi[pos] == )
  60. {
  61. flag = false;
  62. break;
  63. }
  64. }
  65. else
  66. {
  67. if (xianzhi[pos] == -)
  68. xianzhi[pos] = ;
  69. if (xianzhi[pos] == )
  70. {
  71. flag = false;
  72. break;
  73. }
  74. }
  75. }
  76. if (!flag)
  77. puts("");
  78. else
  79. {
  80. ans = ;
  81. for (int i = ; i <= ; i++)
  82. if (xianzhi[i] == -)
  83. ans <<= ;
  84. printf("%lld\n", ans);
  85. }
  86.  
  87. return ;
  88. }
  1.  

hihocoder 1509异或排序的更多相关文章

  1. hihoCoder.1509.异或排序(位运算 思路)

    题目链接 \(Description\) 给定长为\(n\)的序列\(A\).求有多少\(S\),满足\(0\leq S<2^{60}\),且对于所有\(i\in[1,n-1]\),\(a[i] ...

  2. hihocoder 1509 异或排序

    题面在这里! 考虑前后两个数 x,y,可以发现S只有在(x xor y)的最高有1位上的取值是要被确定的 (如果x==y那么没有限制),可以推一下什么情况下是1/0. 于是我们模拟一下这个操作,判一判 ...

  3. HihoCoder#1509 : 异或排序(二进制)

    题意 题目链接 Sol 挺简单的吧.考虑两个元素什么时候不满足条件 设\(a_i\)与\(a_i + 1\)最高的不同位分别为0 1,显然\(S\)的这一位必须为\(0\),否则这一位必须为\(1\) ...

  4. hihoCoder挑战赛28 题目1 : 异或排序

    题目1 : 异或排序 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个长度为 n 的非负整数序列 a[1..n] 你需要求有多少个非负整数 S 满足以下两个条件: ...

  5. 【HIHOCODER 1509 】 异或排序

    描述 给定一个长度为 n 的非负整数序列 a[1..n] 你需要求有多少个非负整数 S 满足以下两个条件: (1).0 ≤ S < 260 (2).对于所有 1 ≤ i < n ,有 (a ...

  6. 【hihoCoder挑战赛28 A】异或排序

    [题目链接]:http://hihocoder.com/problemset/problem/1509 [题意] [题解] 每次找到相邻两个数的二进制形式中; 不同的最高位; 显然S在这一位必然是确定 ...

  7. hihoCoder 1175:拓扑排序二

    题目链接: http://hihocoder.com/problemset/problem/1175 题目难度:一星级(简单题) 今天闲来无事,决定刷一道水题.结果发现这道水题居然把我卡了将近一个钟头 ...

  8. hihocoder 1174 [BFS /拓扑排序判断是否有环]

    hihocoder 1174 [算法]: 计算每一个点的入度值deg[i],这一步需要扫描所有点和边,复杂度O(N+M). 把入度为0的点加入队列Q中,当然有可能存在多个入度为0的点,同时它们之间也不 ...

  9. 题解报告:hihoCoder #1175:拓扑排序·二

    题目链接:https://hihocoder.com/problemset/problem/1175 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho所在学 ...

随机推荐

  1. Javascript深入__proto__和prototype的区别和联系

    有一个一个装逼的同事,写了一段代码 function a(){} a.__proto__.__proto__.__proto__ 然后问我,下面这个玩意a.__proto__.__proto__.__ ...

  2. 从零开始的Python爬虫速成指南

    序 本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容. 本文受众:没写过爬虫的萌新. 入门 0.准备工作 需要准备的东西: Python.scrapy.一个IDE或者随便 ...

  3. KETTLE元数据表

    表名 说明 R_CLUSTER R_CLUSTER_SLAVE R_CONDITION R_DATABASE 数据库连接信息 R_DATABASE_ATTRIBUTE 数据库属性 R_DATABASE ...

  4. [Ubuntu] sogou中文输入法安装

    I install sogou 中文输入法 successfully, after following below steps: 1. install sogou pingyin by deb pac ...

  5. 【每日scrum】NO.9

    (1)这是我们冲刺的最后一天,晚上我们的团队进行了收尾工作:第一阶段的任务基本完成,软件主要实现了校园景点照片以及对应的介绍,查询最短路径,查询涉及相关景点的查询,查询全部路径,基本界面的设计,导航功 ...

  6. Strust2: 工作流程

    以下为Struts2的体系结构图: Struts2框架处理用户请求,大体分为以下几个过程: (1)用户发出一个HttpServletRequest请求 (2)请求经过一系列过滤器,最后达到Filter ...

  7. winform 弹出窗体指定位置

    在启动一个程序时,我们希望窗口显示的位置处于屏幕的正中心,可以如下设置: MainForm mainForm = new MainForm(); mainForm.StartPosition = Fo ...

  8. BETA预发布演示视频

    视频连接:优酷http://v.youku.com/v_show/id_XMTgxMjQxMjc0NA==.html?from=y1.7-2

  9. PAT L1 - 056 猜数字

    https://pintia.cn/problem-sets/994805046380707840/problems/994805074646122496 一群人坐在一起,每人猜一个 100 以内的数 ...

  10. c# assembly

    string path = @"c:\text.dll" Assembly assembly = Assembly.LoadFile(path); path = "MyP ...