目录 题意 输入格式 输出格式 样例 Input Output 数据范围 时间限制 思路 代码 题意 有\(N\)个人,现在你要从中选出\(K\)个人出来,然后让这\(K\)个人一起参加\(K\)场比赛.其中,每个人都要参加所有的比赛. 定义其中一场比赛的得分为这\(K\)个人的得分的最大值.然后定义这个队的得分为\(K\)场比赛的得分的加和. 例如,\(K=3\)时,有一支3个人的队伍,一共打3场比赛.第1个人在3场比赛中的得分分别为\((4, 5, 3)\),第2个人在3场比赛中的得分分别为…
题目:  http://poj.org/problem?id=3714 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=27048#problem/D Raid Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 7355   Accepted: 2185 Description After successive failures in the battles aga…
先说下权值线段树的概念吧 权值平均树 就是指区间维护值为这个区间内点出现次数和的线段树 用这个加权线段树 解决第k大问题就很方便了 int query(int l,int r,int rt,int k)//找第k大的数 { if(l==r) return l; int m=(l+r)/2; if(k<=sum[rt<<1]) return query(lson,k);//看左儿子的sum是否大于k大于的话 说明第k大的树在左儿子(利用出现的次数进行比对---建树的时候 边界是递增的) e…
看到好多讲解都把整体二分和$CDQ$分治放到一起讲 不过自己目前还没学会$CDQ$分治 就单独谈谈整体二分好了 先推荐一下$XHR$的 <浅谈数据结构题的几个非经典解法> 整体二分在当中有较为详细的讲解 先来说一下静态第$K$小的整体二分解法 $(POJ2104)$ 题目链接:http://poj.org/problem?id=2104 所谓整体二分 就是利用所有的询问相互独立而把它们$($此题没有修改操作$)$通过二分把它们分治进行处理 不妨先来考虑下一个简单易懂的$O(NlogS)$的排序…
裸的区间第k大问题,划分树搞起. #pragma comment(linker, "/STACK:10240000") #include <map> #include <set> #include <cmath> #include <ctime> #include <deque> #include <queue> #include <stack> #include <vector> #inc…
HDU 4876 ZCC loves cards 题目链接 题意:给定一些卡片,每一个卡片上有数字,如今选k个卡片,绕成一个环,每次能够再这个环上连续选1 - k张卡片,得到他们的异或和的数,给定一个L,问能组成[L,R]全部数字的情况下,R的最大值是多少 思路:暴力C(20, 6),然后对于每一个序列去全排后模拟计算值, 只是之前要有个剪枝.全排前.先把k个数随机取数(即不用连续),然后假设这样还满足不了,那么连续的情况肯定也满足不了.直接结束.不进入全排.这样一来因为满足不了的情况实际上是占…
odds Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 250    Accepted Submission(s): 72 Problem Description 度度熊有一棵 N 个节点 (node) 的有根树 (rooted tree),树上的每条边 (edge) 都有一个整数的权重,对于每一个非叶的节点 (non-leaf n…
题目描述: Playlist time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You have a playlist consisting of n songs. The -th song is characterized by two numbers *t**i* - its length and beauty respec…
暴力求长度为len时,以i,j为左上角的旗子的数量 不剪枝的话复杂度是n*n*m*n,必定超时 两个可以剪枝的地方:如果格子[i,j]可以作为长度为len的旗子的左上角,那么其必定不可以作为长度>len的旗子的左上角 同理,如果格子[i,j]为左上角不可以组成长度为len的旗子,并且是因为len行内有不同色块导致的,那么显然这个格子作为左上角也不可以作为长度>len的旗子的左上角 用f[i][j]标记一下即可 #include<bits/stdc++.h> using namesp…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5839 在一个三维坐标,给你n个点,问你有多少个四面体(4个点,6条边) 且满足至少四边相等 其余两边不相邻. 暴力4重循环,但是在第3重循环的时候需要判断是否是等腰三角形,这便是一个剪枝.在第4重循环的时候判断4点是否共面 (叉乘), 5或者6边相等就+1,4边相等就判断另外两边是否相交就行了. 赛后过的,觉得自己还是太菜了. //#pragma comment(linker, "/STACK:10…
小晴天老师系列——晴天的后花园 Time Limit: 10000/5000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)   Problem Description 小晴天非常漂亮的后花园,打算以后退休之后在里面种种花,养养草,所以现在小晴天打算为他的后花园围上栅栏. 小晴天的后花园可以看成是一个m*n的矩形,但是其中有一些地方种了树,这些地方都不能安装栅栏,现在小晴天把后花园的平面图告诉你了,请你帮忙设计一个最大的…
首先这道题不是非同一般的恶心,三个数据层次对应三个程序= = PROBLEM:http://uoj.ac/problems解法: 1~2直接暴力枚举边的选择与否+判断就行了 7~14可以发现是一个平面图,联想到BZOJ1001的题目,考虑用最短路解决。对于每个点,可以发现有3种选择方式,任选一条或全选,就能用k短路解决了,由于这道题题目特殊,最短路树是条链+每个点只有3条边,不用写堆套堆的恶心程序还可以 其他:WC上讲了,让人有一种好像很容易的感觉,其实还是恶心得一塌糊涂 首先先求出最小割,对于…
You have been given n distinct integers a1, a2, ..., an. You can remove at most k of them. Find the minimum modular m (m > 0), so that for every pair of the remaining integers (ai, aj), the following unequality holds: . Input The first line contains…
题目大意 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50.现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度.给出每段小木棍的长度,编程帮他找出原始木棍的最小可能长度. 总体思路 令totLen为所有小木棍总长度,枚举每一个原始木棍的可能长度eachLen(sumLen%eachLen==0),判断那些原始木棍能否全部由小木棍凑成. 判断过程的朴素算法为:枚举原始木棍的每一种排列方式,看看这样能否凑成totLen/eachLen个原始…
数据结构与算法实验题 K 歌 ★实验任务 3* n 个人(标号1~ 3 * n )分成 n 组 K 歌.有 m 个 3 人组合,每个组合都对应一个分数,你能算出最大能够得到的总分数么? ★数据输入 输入的第 1 行是一个正整数 n 和 m(1<= n <=6 ,  n<=m<= C(3*n,3) 组合数) ,输入的第2~m+1行每行包括四个正整数a,b,c,s(1<=a , b ,c <=3 *n, a,b,c不相等,1<=s<=10 ^8)表示组合(a,b…
题目传送门(内部题47) 输入格式 第一行一个正整数$n$.第二行$n$个正整数,表示序列$A_i$. 输出格式 一行一个正整数,表示答案. 样例 样例输入: 530 60 20 20 20 样例输出: 数据范围与提示 样例解释: 最后四个元素形成的子序列权值最大. 数据范围: 对于前$30\%$的数据:$n\leqslant 2,000$对于所有数据:$1\leqslant n\leqslant {10}^5$$1\leqslant A_i\leqslant {10}^9$ 题解 再一次没有打…
题目描述 小$G$有一个长度为$n$的$01$串$T$,其中只有$T_S=1$,其余位置都是$0$.现在小$G$可以进行若干次以下操作: $\bullet$选择一个长度为K的连续子串($K$是给定的常数),翻转这个子串. 对于每个$i,i\in[1,n]$,小$G$想知道最少要进行多少次操作使得$T_i=1$.特别的,有$m$个“禁止位置”,你需要保证在操作过程中$1$始终不在任何一个禁止位置上. 输入格式 从文件$reverse.in$中读入数据. 第一行四个整数$n,K,m,S$. 接下来一…
第二小整数 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 8299    Accepted Submission(s): 5227 Problem Description 求n个整数中倒数第二小的数.每一个整数都独立看成一个数,比如,有三个数分别是1,1,3,那么,第二小的数就是1.   Input 输入包含多组测试数据.输入的第一行…
此题poj1054上也有 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct lzr{ int x,y; }f[]; int R,C; ][]; bool cmp(lzr xx,lzr yy) { if (xx.x==yy.x) return xx.y<yy.y; return xx.x<yy.x; } int main() { bool pd;…
题目描述 Description 给出两个有序数组A和B(从小到大有序),合并两个有序数组后新数组c也有序,询问c数组中第k大的数 假设不计入输入输出复杂度,你能否给出一个O(logN)的方法? 输入描述 Input Description 第一行输入三个整数n.m和k 第二行输入n个用空格隔开的整数表示数组A 第三行输入m个用空格隔开的整数表示数组B 输入保证A和B数组非递减 输出描述 Output Description 合并两个数组之后的第k大的数 样例输入 Sample Input 2…
题目描述 Description 给出两个有序数组A和B(从小到大有序),合并两个有序数组后新数组c也有序,询问c数组中第k大的数 假设不计入输入输出复杂度,你能否给出一个O(logN)的方法? 输入描述 Input Description 第一行输入三个整数n.m和k 第二行输入n个用空格隔开的整数表示数组A 第三行输入m个用空格隔开的整数表示数组B 输入保证A和B数组非递减 输出描述 Output Description 合并两个数组之后的第k大的数 样例输入 Sample Input 2…
Description 打地鼠是这样的一个游戏:地面上有一些地鼠洞,地鼠们会不时从洞里探出头来很短时间后又缩回洞中.玩家的目标是在地鼠伸出头时,用锤子砸其头部,砸到的地鼠越多分数也就越高. 游戏中的锤子每次只能打一只地鼠,如果多只地鼠同时探出头,玩家只能通过多次挥舞锤子的方式打掉所有的地鼠.你认为这锤子太没用了,所以你改装了锤子,增加了锤子与地面的接触面积,使其每次可以击打一片区域.如果我们把地面看做M*N的方阵,其每个元素都代表一个地鼠洞,那么锤子可以覆盖R*C区域内的所有地鼠洞.但是改装后的…
同时找到最大值与最小值 找到n个元素中的最大/小值,比较次数为n-1, 找到n个元素中的最大值和最小值,可以Two Pass,比较次数为2n-2 也可以One Pass,比较次数至多为\(\left \lfloor 3n/2 \right \rfloor\) 首先对最大值和最小值进行初始化,n为奇数时MAX和MIN均初始化v[0],n为偶数时MAX和MIN分别初始化为v[0]和v[1]中的最大值和最小值 然后每两个数比较一次,小的数和MIN比较,大的数和MAX比较,共进行三次 对于n为奇数,总比…
题:https://ac.nowcoder.com/acm/contest/3979/F 题意:俩个序列俩俩相乘得到n*m个数,求第k大的数是哪个 分析:二分 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back #define lson root<<1,l,midd #define rson root<<1|1,midd+1,r ; const l…
[POJ3612] Telephone Wire(暴力dp+剪枝) 题面 有N根电线杆,初始高度为h[i],要给相邻的两根连线.可以选择拔高其中一部分电线杆,把一根电线杆拔高\(\Delta H\)的代价为\(\Delta H^2\).拔高后,要给相邻的电线杆连线,连线相邻两根电线杆操作的代价为\(C\Delta H\),其中C是一个常量且已经给出.求最小总代价. 分析 考虑一个显然的dp,设\(dp[i][j]\)表示前i根电线杆,第i根拔到高度j的最小代价,记H表示max(h[i]) 则\(…
Minimum Modular time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You have been given n distinct integers a1, a2, ..., an. You can remove at most k of them. Find the minimum modular m (m > 0…
Minimum Modular 题意:就是在一堆数字中,每一个数字对m取模不能等于这堆数字中的其他数字,同时给了K个机会可以删除一些数字.求最小的m: 思路:我一开始完全没思路,队长说的并查集什么的不会,于是就看了看别人的题解,看到可以用暴力剪枝的做法: 至于减枝的做法就是: 首先想到暴力,从小到大枚举m,然后判断n个数中对m取模同余个数有多少,如果超出k就枚举更大的m.然而这样的话,时间复杂度为O(n*1e6).然后在网上找了博客看,但是有些地方当时自己感觉很不好理解的,这里做下自己的解释.1…
在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,解决这个问题的方法很多. 所谓“第(前)k大数问题”指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题. 解法1: 我们可以对这个乱序数组按照从大到小先行排序,然后取出前k大,总的时间复杂度为O(n*logn + k).      解法2: 利用选择排序或交互排序,K次选择后即可得到第k大的数.总的时间复杂度为O(n*k)      解法3: 利用快速排序的思想,从数组…
有了上一题的经验(POJ的静态区间第K最值)再解决这道题就轻松多了 空间5256KB,时间3330ms,如果把动态开点的平衡树换成数组模拟的话应该会更快 之所以选择了平方分割而不是树套树,不仅是所谓趁热打铁,更是因为: 平方分割的修改操作,无论编程复杂度还是时间复杂度都远优于树套树. 代码如下:(鄙人不才,不会压代码,所以写了300多行Σ( ° △ °|||) template <class T> struct SbtNode { typedef SbtNode<T> Node;…
Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with the query like to simply find the k-th smallest number of the given N numbers. They…