[hihocoder1509][异或排序]】的更多相关文章

hihocoder1509 思路 对于每两个数,从二进制的高位到低位考虑,发现,若前面一个的当前位是1,后面一个的当前位置是0,那么s的当前位置必须是1.反之,若前面是0,后面是1,那么s的当前位置必须是0.如果出现矛盾的情况则直接输出0.如果两个数高位已经可以判断出大小了,那么后面的位置随便选就可以了. 代码 #include<cstdio> #include<iostream> #include<cstring> using namespace std; typed…
题目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 输出 一个非负正数,表示答…
题目链接 \(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…
描述 给定一个长度为 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分析:二进制,…
题意 题目链接 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 < 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…
题目链接 题目大意: 给定一个长度为 n 的非负整数序列 a[1..n] 你需要求有多少个非负整数 S 满足以下两个条件: (1).0 ≤ S < 260 (2).对于所有 1 ≤ i < n ,有 (a[i] xor S) ≤ (a[i+1] xor S) 1 ≤ n ≤ 50 0 ≤ a[i] < 260 ------------------------------------------------------------------------------------- 开始看到…
简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置.如此往复,直到将整个数组排序.这种方法叫做选择排序,因为它在不断地选择剩余元素中地最小者. 代码实现 public static void SelectionSort(int[] arr){ if(arr==null||arr.length<2) return; //去除多余情况 in…
题解:观察测试样例,会发现每个子集的选择规律与二进制((2^n) - 1)到 1 的顺序生成的规律是一致的,样例中n=3,2^n-1=7,用二进制表示为111,其中每一位的1表示数组中的三个数都选择. class Subset { public: vector<vector<int> > getSubsets(vector<int> A, int n) { sort(A.begin(),A.end()); vector<vector<int>>…
 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5968 思路:先把所有的连续异或值保存起来,排序,然后用二分找到距离x最近的那个点,判断即可:   #include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #include <bitset> #include <iostream> #inc…
选择排序是<导论>第一章课后习题,仿照插入排序,再次运用循环不变式来证明下算法的正确性,C++ 源码: // 交换函数 void swap( int& a, int& b ) { a = a^b; b = a^b; a = a^b; } void selectSort( int *arr, int count ) { if( arr == nullptr || count == 0 ) { return; } for( int i = 1; i < count; i++…
3. 有哪些操作会使用到TempDB:如果TempDB异常变大,可能的原因是什么,该如何处理: tempdb的用途:1)存储专用和全局临时变量,不考虑数据库上下文: 2)与Order by 子句,游标,Group by子句和Hash计划相关的工作表 3)显式创建的临时对象,如存储过程,游标,表和表变量. 4)如果启动快照隔离功能,记录所有版本的更新记录. 5)指定Sort_in_tempdb时创建或重建索引操作时的临时排序结果 如果TempDB异常变大,可能的原因是数据被频繁的使用tempdb数…
import java.io.*; import java.util.*; public class SortTest{ public static void main(String args[]) throws IOException, ClassNotFoundException { FileReader InWord = new FileReader(new File("words.txt")); BufferedReader in = new BufferedReader(In…
参考 http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html http://blog.csdn.net/wuxinyicomeon/article/details/5996675 常用的排序算法的时间复杂度和空间复杂度 排序法 时间复杂度 空间复杂度 稳定性 复杂性 平均情况 最坏情况 最好情况 冒泡排序 O(n2) O(n2)  O(n) O(1) 稳定 简单  快速排序 O(n*log2n) O(n2)  O(n) O(log2…
白书上的例题比较难,认真理解样例代码有助于提高自己 后面的练习题相对简单,独立思考解决问题,增强信心 题意:n个绝对值各不相同的非0整数,选出尽量多的数排成序列,使得该序列正负交错且绝对值递增. 解法:先按绝对值从小到大排序,然后第一个数先入队,然后依次比较后面的数,如果和队尾的数符号相反则入队,直到所有的数遍历完为止 这里用了异或运算,因为这里面没有0,所谓符号相同的两个数异或值为正,不同符号的数异或值为负 //#define LOCAL #include <algorithm> #incl…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5821 有n个盒子,每个盒子最多装一个球. 现在进行m次操作,每次操作可以将l到r之间盒子的球任意交换. 问进行上述操作后,是否能变成指定的状态. 将颜色相同的球,尽量靠最终状态近的分配.对于每次操作 按最终序号靠近进行排序.最后检查是否一致就行了. 官方题解:假设有4个红球,初始时从左到右标为1,2,3,4.那么肯定存在一种方案,使得最后结束时红球的顺序没有改变,也是1,2,3,4. 那么就可以把同…
常用的排序算法的时间复杂度和空间复杂度   常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n) 选择排序 O(n2) O(n2) 稳定 O(1) 二叉树排序 O(n2) O(n*log2n) 不一顶 O(n) 插入排序 O(n2) O(n2) 稳定 O(1) 堆排序 O(n*log2n) O(n*log2n) 不稳定 O(…
快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排序(Quick sort)的算法分析的过程非常给力. 本文首先描述问题,再说明快速排序(Quick Sort)的基本思路并给出伪代码,之后贴出自己的Python代码.在验证完算法的正确性之后,给出如何选择好的中心枢(pivot)的方法,即随机快速排序(Randomized Quick sort),并…
Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 题目意思:找出一个数组中的一个不同的元素. 新手想法,先排序,然后循环找出那个前后不一…
1.冒泡排序法:如果有N个数,两两相邻进行比较,将最值沉入最后一位置,要进行N-1轮比较, 第一轮要比较N-1次,第2轮只要比较N-1-1次,因为第一次已经把最值沉入最后一位置,故 不需在进行比较一次,也就是说每一轮都减少一次,所以第2个for循环中j < n-i;下列代码是升序排序 void bubble_sort(int *num, int n) { int num_temp; ; i<n; i++) ; j<n-i;j++) { ]) { num_temp = num[j]; nu…
这一篇博文我们将讨论一些与排序算法有关的定理,这些定理将解释插入排序博文中提出的疑问(为什么冒泡排序与插入排序总是执行同样数量的交换操作,而选择排序不一定),同时为讲述高级排序算法做铺垫(高级排序为什么会更快). 在讨论相关定理之前,我们必须先掌握一个与顺序有关的概念:逆序数. 所谓逆序数,就是"逆序组合的个数",假设我们希望的顺序为从小到大(反之同理): 设有元素互异数列X0,X1,X2--Xn-1,(元素互异即数列中任取两数均不相等)从中任取两数作为组合(Xa,Xb),若a<…
在上一篇博文中我们提到:要令排序算法的时间复杂度低于O(n2),必须令算法执行"远距离的元素交换",使得平均每次交换减少不止1逆序数. 而希尔排序就是"简单地"将这个道理应用到了插入排序中,将插入排序小小的升级了一下.那么,希尔排序是怎么将这个道理应用于插入排序的呢?我们先来回顾一下插入排序的代码: void InsertionSort(int *a, unsigned int size) { int CurPos; //CurPos表示执行插入的元素当下所处的下标…
/* Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), -, (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large as possible. Example 1: Input: [1,4,3,2] Output: 4 Expla…
A. Numbers Joke time limit per test:2 seconds memory limit per test:64 megabytes input:standard input output:standard output   Input The input contains a single integer a (1 ≤ a ≤ 30). Output Output a single integer. Example Input 3 Output 27 题目链接:ht…
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 本笔记源于CDA-DSC课程,由常国珍老师主讲.该训练营第一期为风控主题,培训内容十分紧凑,非常好,推荐:CDA数据科学家训练营 ------------------------------------------ 一.风控建模流程以及分类模型建设 1.建模流程 该图源自课程讲义.主要将建模过程分为了五类.数据准备.变量粗筛.变量清洗.变量细筛…
一些常用的排序 #系统内置排序算法#list.sort()#heapq模块 def sys_heap_sort(list): import heapq heap = [] for i in range(len(list)): heapq.heappush(heap,list[i]) for i in range(len(heap)): list[i] = heapq.heappop(heap) #python操作列表的方法,它们的时间复杂度 #insert() --->  O(n) #remov…
快速排序也是一种分治的排序算法.快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序,会需要一个额外的数组:而快速排序的排序方式是当两个子数组都有序时,整个数组就自然有序了,快速排序可以不产生额外的数组. 对于小数组(N<=20),快速排序不如插入排序.所以,小数组建议使用其他排序. 快速排序可以由以下几步组成: 1.如果数组S中的元素个数是0或1,则返回. 2.取S中任一元素v,称为枢纽元. 3.将S中其余元素(除枢纽元)分为两部分,一部分是小…
最近再写项目的时候,碰到一个问题:如何将一个或多个二维数组组合成一个二维数组并根据某个字段排序排序:实在是想不到哪个php库中有哪个函数能实现,只能自己写一个了,将代码写出来后,发现自己的代码繁琐,并且不宜封装成一个函数:经过跟请教同事之后,终于将代码精简并封装好:废话少说,请看下面代码,如有疑问,请评论. //例:将以下三个数组合并成一个数据,并以 "sort" 字段排序 $a = array( array('sort'=>0), array('sort'=>2), ar…