HihoCoder#1509 : 异或排序(二进制)】的更多相关文章

题意 题目链接 Sol 挺简单的吧.考虑两个元素什么时候不满足条件 设\(a_i\)与\(a_i + 1\)最高的不同位分别为0 1,显然\(S\)的这一位必须为\(0\),否则这一位必须为\(1\) 剩下的就没有限制条件了 时间复杂度:\(nlogn\)??????!!!!!! #include<bits/stdc++.h> #define LL long long #define int long long using namespace std; const int MAXN = 62,…
描述 给定一个长度为 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 输出 一个非负正数,表示答案 样例输入 3 1 2 3 样例输出 288230376151711744分析:二进制,…
题目链接 \(Description\) 给定长为\(n\)的序列\(A\).求有多少\(S\),满足\(0\leq S<2^{60}\),且对于所有\(i\in[1,n-1]\),\(a[i]^{\wedge}S\leq a[i+1]^{\wedge}S\). \(n\leq20\). \(Solution\) 考虑对于\(a,b\),有哪些\(S\)满足\(a^{\wedge}S\leq b^{\wedge}S\). 找出\(a^{\wedge}b\)的最高位\(1\)(也就是\(a,b\)…
题面在这里! 考虑前后两个数 x,y,可以发现S只有在(x xor y)的最高有1位上的取值是要被确定的 (如果x==y那么没有限制),可以推一下什么情况下是1/0. 于是我们模拟一下这个操作,判一判限制有没有矛盾,如果没有矛盾答案就是 2^自由位 #include<bits/stdc++.h> #define ll long long using namespace std; int n,ban[67]; ll now,pre,Xor,c[67],ans=1; int main(){ sca…
题目1 : 异或排序 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个长度为 n 的非负整数序列 a[1..n] 你需要求有多少个非负整数 S 满足以下两个条件: (1).0 ≤ S < 260 (2).对于所有 1 ≤ i < n ,有 (a[i] xor S) ≤ (a[i+1] xor S) 输入 第一行一个正整数 n 第二行 n 个非负整数表示序列 a[1..n] 1 ≤ n ≤ 50 0 ≤ a[i] < 260 输出 一个非负正数,表示答…
描述 给定一个长度为 n 的非负整数序列 a[1..n] 你需要求有多少个非负整数 S 满足以下两个条件: (1).0 ≤ S < 260 (2).对于所有 1 ≤ i < n ,有 (a[i] xor S) ≤ (a[i+1] xor S) 输入 第一行一个正整数 n 第二行 n 个非负整数表示序列 a[1..n] 1 ≤ n ≤ 50 0 ≤ a[i] < 260 输出 一个非负正数,表示答案 样例输入 3 1 2 3 样例输出 288230376151711744 题解 对于两个相…
[题目链接]:http://hihocoder.com/problemset/problem/1509 [题意] [题解] 每次找到相邻两个数的二进制形式中; 不同的最高位; 显然S在这一位必然是确定的; 必须在这一位确定数字让a[i]< a[i+1]; 至于更高位的,它们的数字是相同的,以及更低位的; 它们都任意; 因为要对于所有的i∈[1..n-1]都满足要求 所以看看哪些位置最后是确定的; (或者发生了抵触->直接输出0) 然后剩下的位置的个数为x; 则答案就为2^x; [Number…
题目链接: http://hihocoder.com/problemset/problem/1175 题目难度:一星级(简单题) 今天闲来无事,决定刷一道水题.结果发现这道水题居然把我卡了将近一个钟头. 最后终于调通了.总结起来,原因只有一个:不够仔细. 思路不用细说了,就是拓扑排序的简单应用.然而,一些不起眼的细节才是让你掉坑里的真正原因. 猜猜哪儿可能出bug? // A simple problem, but you can't be too careful with it. #inclu…
hihocoder1509 思路 对于每两个数,从二进制的高位到低位考虑,发现,若前面一个的当前位是1,后面一个的当前位置是0,那么s的当前位置必须是1.反之,若前面是0,后面是1,那么s的当前位置必须是0.如果出现矛盾的情况则直接输出0.如果两个数高位已经可以判断出大小了,那么后面的位置随便选就可以了. 代码 #include<cstdio> #include<iostream> #include<cstring> using namespace std; typed…
题目2 : 二进制翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 定义函数 Rev(x) 表示把 x 在二进制表示下翻转后的值 例如: Rev(4)=1,因为 4 等于(100)B,翻转后是 (001)B,也就是 1 Rev(6)=3,因为 6 等于(110)B,翻转后是 (011)B,也就是 3 定义 Cnt(x) 表示 x 在二进制表示下 1 的个数,求: 输入 仅一行,一个非负整数 n 0 ≤ n ≤ 1015 输出 仅一行:一个非负整数表示答案 样例输…