排序
f_zyj
一个追逐蝴蝶的人!
展开
-
CF-Codeforces Round #487 (Div. 2)-D-A Shade of Moonlight
ACM模版描述 题解数轴上 nnn 个不重叠的云,给坐标,长度都是 lll,有些云速度 111,有些云速度 −1−1-1,现风速 www,问在风速不大于 wmaxwmaxw_{max} 时,有几对云可能在 000 相遇。对于会相遇的云,肯定一个是 vi=1vi=1v_i = 1,一个是 vi=−1vi=−1v_i = -1,所以我们首先可以根据 viviv_i 将云分为两...原创 2018-06-12 21:11:28 · 533 阅读 · 0 评论 -
EOJ-大学生程序设计邀请赛(华东师范大学)-H-法国传统舞蹈
ACM模版描述 题解这个题可以抽象成一个经典的问题——任意交换两个元素,使给定序列有序化。官方题解写的十分好,所以这里直接上官方题解吧……(^__^) 嘻嘻……由于每一步操作可逆,所以从初始状态到目标状态跟目标到初始是等价的。先枚举将英文字母用不重复的数代替的方案。然后,考虑在目标状态中每一个数的后继。注意到在初始状态中对于每一个数是有唯一的合法后继的。每一次操作,可以发现,一定是交换了两个数的后原创 2017-05-16 11:59:14 · 653 阅读 · 0 评论 -
ZOJ-The 14th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple-A~B
ACM模版心血来潮,参加了这么啥比赛,名字好长啊,只是参加了网赛,感觉还行,就是看不懂题~~~前两题过于简单,所以写在一起吧!A-Cooking Competition描述题解水题。代码#include <iostream>using namespace std;const int K[] = {0, 1, 0, 1, -1};const int D[] = {0, 0, 1, 1, -1};in原创 2017-04-23 23:29:08 · 643 阅读 · 0 评论 -
CF-Codeforces Round #410 (Div. 2)-D-Mike and distribution
ACM模版描述题解这个题当时我没看懂题,所以没做,后续补题时学到了很多东西~~~好题!题意大概是,从 A[] 和 B[] 中对应位置分别取不超过⌊n2⌋+1\lfloor\frac{n}{2}\rfloor + 1 个数,使分别对于 A[] 和 B[] 来说,这些数之和的二倍大于该数组和,也就是说子集的两倍大于数组和,那么等价于所取的数之和大于未取的数之和,所以,这里自然是取数越多越好,最多 ⌊n2原创 2017-04-23 13:07:52 · 611 阅读 · 0 评论 -
C语言快排函数qsort()
原本以为C语言中的快排函数都要靠自己去实现,今天才知道,原来qsort就是C语言中的快排函数,包含在stdlib.h头文件中,函数一共有四个参数,没有返回值。//int (*cmp)(const void *,const void *);qsort(*s, n, sizeof(s[0]), cmp);其中第一个参数s是一个地址,即参与排序的首地址;n是需要排序的数量;sizeof(s[0])原创 2016-05-23 21:04:02 · 89924 阅读 · 33 评论 -
51Nod-1821-最优集合
ACM模版描述题解这道题属于一道模拟问题吧,如果没有定义错模拟这个词的话。看到讨论区中有一个 ID 为 zhenhao 的大牛,写了十分详细的题解,我也是看了人家的思路才写的代码,像这种模拟的问题,需要注意的就是思路一定要清晰,把情况考虑周全了,不然很容易错,我就是少考虑一种情况,一直错。繁琐的循环判断有机的组合在一起,最后达到 O(T*(M+N)) 的复杂度还不行,还需要进行剪枝,break 或者原创 2017-03-14 01:02:43 · 643 阅读 · 0 评论 -
腾讯2017暑期实习生编程题-C-有趣的数字
ACM模版描述题解这个招聘实习生的编程题真心简单,可是我在牛客网上做的,莫名其妙的 WA,但是我思路肯定没问题啊,本地测试的样例也是过的,可是系统提示说我连样例都错了,这就尴尬了,感觉牛客网的测评系统好垃圾啊~~~首先排序,然后分别求最大数最小数出现的次数,然后根据乘法原理得差最大对儿数,接着,求相邻两个差最小的值,如果为0,说明存在重复数字,求重复最多的次数,然后根据等差数列求差最小对儿数,否则,原创 2017-03-07 22:50:38 · 532 阅读 · 0 评论 -
GDUT-1164-找出出现次数超过一半的数
ACM模版描述题解很有趣的一道题,不算难,但是和几个朋友讨论这道题涨了些许姿势~~~首先,这道题如果用 map 写,理论上会超时,本来这样就是小题大做。比较直观的是 sort 一下,然后扫描一下就好了,但是如果只是这样也就没有讨论的必要了,试图寻找更好的解题思路时,我的思维过于局限,局限在了计数上,当然并不是说计数就无法更优,只是我没有参透些许。经过讨论,有四种不错的思路: 第一种,多重 HASH原创 2017-01-04 20:24:52 · 404 阅读 · 1 评论 -
HDU-1009-FatMouse' Trade
ACM模版描述题解算法思想上就是一到十分简单的贪心……但是还是要为它点个赞~(≧▽≦)/~因为我这种英语渣渣猛一看,以为是01背包/(ㄒoㄒ)/~~还好苦海无涯,我回头是岸,发现原来每个屋子里的咖啡豆量是可以分割的,所以直接求出每个房间的咖啡豆的性价比即可,然后排序贪心,然而,搞到这里,这么简单个题,我还是WA了,这也是我点赞的原因——卡精度了。题目最后要求输出的结果保留三位小数,所以我想当然的用了原创 2016-10-17 02:36:29 · 1573 阅读 · 3 评论 -
51Nod-1377-最慢的快排
ACM模版描述 题解懵逼系列……这个题看得不是特别懂,给出官方题解帮助大家参考吧~~~难道说是熬夜的原因?题解我也看得十分懵逼!代码#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>using namespace std;const int MAXN = 5e4 + 10;int n, k;i原创 2017-06-16 05:46:49 · 983 阅读 · 1 评论 -
图灵杯-第四届“图灵杯”NEUQ-ACM 程序设计竞赛-J-简单的变位词
ACM模版描述题解简单的字符串排序去重问题,用 map 搞搞,打标签,然后用 vector 存储,搞搞事情,最后输出,多于 5 个输出前 5 个,少于 5 个,有几个输出几个……注意,去重的时候只是去掉相同的词,但是个数还是要算的。我一开始忘了去重,╮(╯▽╰)╭哎,以后打比赛前夕再也不熬夜了,晚上五点才睡,第二天各种 bug 各种 wa~~~代码#include <iostream>#inclu原创 2017-06-12 01:17:48 · 628 阅读 · 0 评论 -
51Nod-1421-最大MOD值
ACM模版描述题解讨论区某大神的神奇解法,实在是精髓啊……具体的思路可以查看评论区该大神的详细代码注释。这个题比较常规的解法是用二分,首先排序,然后二分查找每个倍数区间的最大值,比如说,对于 66 这个数,我们并不需要把大于 66 的每一个数都进行测试,只需要在 7∼127 \sim 12、13∼1813 \sim 18 等区间分别找到最大值进行判断,如果存在的话。这个过程用二分可以完美解决,没毛病原创 2017-06-23 16:02:54 · 744 阅读 · 2 评论 -
CF-Educational Codeforces Round 44 (Rated for Div. 2)-A-Chess Placing
ACM模版描述题解凑等差数列,一种是 a1=1a1=1a_1 = 1,一种是 a1=2a1=2a_1 = 2,取凑成这两种等差数列的代价中较小的,注意序列并没有保证有序,所以需要先排序。代码#include <iostream>#include <algorithm>#include <cmath>using namesp...原创 2018-05-22 04:28:33 · 640 阅读 · 0 评论 -
HDU-2017 多校训练赛7-1008-Hard challenge
ACM模版描述题解类似于尺取法的一个东西,扫描一下就好了。代码#include <iostream>#include <cmath>#include <algorithm>using namespace std;const int MAXN = 5e4 + 7;struct node{ long long x; long long y; long long val;原创 2017-08-15 18:52:01 · 522 阅读 · 0 评论 -
HDU-2017 多校训练赛6-1003-Inversion
ACM模版描述题解这个题实际上就是一个排序,然后暴力查找就好了,复杂度看似高,其实最坏情况下的复杂度为:nlogn+n/2+n/3+n/4+…+n/nnlogn + n/2 + n/3 + n/4 + … + n/n,也就是 nlognnlogn。然而一开始我将这个题想难了……以为是一个线段树求区间最值的题……折腾好久。代码#include <cstdio>#include <cmath>#in原创 2017-08-10 17:08:16 · 438 阅读 · 0 评论 -
51Nod-1563-坐标轴上的最大团
ACM模版描述题解这个题根据题意,我们知道,根据 xx 和 ww 可以确定某一个点的不可连边的区间,而两个点的区间只要不重叠,就可以连边,那么最大团就是尽可能多的选取互相不重叠的区间,也就变成了类似于 0101 背包的问题,可是这个题好像数据比较弱还是怎么回事,直接排序后贪心就能过……所以,水过了!!!代码#include <cstdio>#include <iostream>#include原创 2017-07-25 20:49:57 · 434 阅读 · 0 评论 -
关于排列(poj1833)问题
Description 题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列。 任务描述: 给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n。 比如:n = 3,k...原创 2015-12-20 14:08:23 · 3275 阅读 · 11 评论 -
51Nod-1485-字母排序
ACM模版描述题解一开始看到讨论区有人说,将排序部分改成 O(n)O(n) 就行了,然后我就傻傻的以为,计数排序搞一下就行了,然后,果然,无情 TLETLE 了四五组数据,后来知道了这个可以用线段树写,建 2626 棵线段树,分别维护每种字母在不同区间的出现次数(计数部分),试了试,依然挂了一组数据,然后加上了输入输出外挂,险过,差一丢丢就挂了……后来呢,看到有人用 splay 解得,有些厉害了,我原创 2017-07-23 19:12:27 · 653 阅读 · 2 评论 -
51Nod-1589-移数博弈
ACM模版描述题解这个题的解法真是奇思妙想,一开始只是知道单调栈搞不定,至于为什么,因为话题这里写得不是单调栈啊……当然也不是特别理解为什么要用链表,看了题解后恍然大悟。对于这种题,尽管用的数据结构变了,但是不变的是逐个求贡献,那么这个题我们需要根据什么求贡献呢?我们可以求出对于每一个值的位置 nownow 的相关四个数,分别是位于他前边的两个大于他的数 l1、l2l1、l2 以及位于他后边的两个大原创 2017-07-20 18:34:14 · 456 阅读 · 0 评论 -
51Nod-1431-快乐排队
ACM模版描述题解这个题只需要判断是否可以高兴,所以难度降低了很多。这里我们可以拿第二组 Sad 的考虑,初始化 9 89\ 8,如果调换的话,可以发现依然是 9 89\ 8,并且交换的过程中,我们是用一个位置的代价换得了一个经济的收入或者支出,那么我们可以这样认为,位置的价值和经济的价值是对等的,一个位置的距离价值为一元,那么我们只需要求出所有人的现有经济和与队尾距离的和,酱紫然后排序去重,如果无原创 2017-06-25 01:43:30 · 329 阅读 · 0 评论 -
51Nod-1055-最长等差数列
ACM模版描述题解这道题虽然过了,但是不得不说是打了内存的擦边球,因为前所未有的使用了short int类型,不然就爆内存了,这也是很措手不及。这道题的坑不止这一点,题目说,从这N个数中找出若干数组成最长等差数列,所以,顺序上我们可以打乱,先进行一下排序是很有必要的。最后不得不承认,这道题的dp思路是我之前所没有的,先固定一个端点,然后两边扫描,也是极其有趣,必须点个赞,以前做dp,总是想着单方向的原创 2016-10-14 00:59:13 · 1080 阅读 · 8 评论 -
51Nod-1065-最小正子段和
ACM模版描述题解将前n项和求出来并排序,然后比较相邻两项其位置关系,如果可以组成序列,则说明其可能是所要求结果,然后从所有可能是结果的结果中取出最小值即可。 如: 序列 4 -1 5 -2 -1 2 6 -2排序前 sum 4 3 8 6 5 7 13 11 pos 1 2 3 4 5 6 7原创 2016-08-01 21:57:57 · 1346 阅读 · 4 评论 -
51Nod-1096-距离之和最小
ACM模版描述题解排序后依次头尾相减累加,水题。代码#include <iostream>#include <algorithm>using namespace std;const int MAXN = 1e4 + 10;int P[MAXN];int main(int argc, const char * argv[]){ int N; cin >> N; for (in原创 2016-08-06 00:17:32 · 503 阅读 · 0 评论 -
51Nod-1432-独木舟
ACM模版描述题解排序然后首尾配对查找,记录配成的对儿数即可。代码#include <iostream>#include <algorithm>#include <cstdio>typedef long long ll;using namespace std;const int MAXN = 1e4 + 10;ll M[MAXN];int main(int argc, const char *原创 2016-08-04 14:57:30 · 481 阅读 · 3 评论 -
51Nod-1631-小鲨鱼在51Nod小学
ACM模版描述题解暴力解题就能通过,数据比较水,感觉我的代码有些麻烦,有很大的优化空间。这里要说的是,其实年月日可以转化为一个独有的序号转存,这个序号依然保持原来日期的对比关系。 比如说,将2001年1月1日存为:2001101,(2001*1000 + 1 * 100 + 1),这样子,两个日期间的对比关系用此序号对比依然成立。也可以使用<set>集合优化。代码#include <iostrea原创 2016-08-16 01:59:04 · 773 阅读 · 0 评论 -
51Nod-1428-活动安排问题
ACM模版描述题解将所有开始时间和结束时间存入一个数组内,然后排序,最后从头至尾遍历,初始化flag=0,遇见开始时间则flag++,反之则更新res并flag--。代码#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 1e4 + 10;struct party原创 2016-08-04 13:14:47 · 396 阅读 · 0 评论 -
OpenJudge-计算机概论(A)-1-生日相同 2.0
描述: 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。输入 第一行为整数n,表示有n个学生,n≤180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1≤m≤12)日(1≤d≤31)。名字、月、日之间用一个空格分隔。输出 每组生日相同的学生,输出一行原创 2016-04-15 17:09:11 · 5332 阅读 · 0 评论 -
51Nod-1018-排序
给出N个整数,对着N个整数进行排序 Input 第1行:整数的数量N(1 <= N <= 50000) 第2 - N + 1行:待排序的整数(-10^9 <= A[i] <= 10^9) Output 共n行,按照递增序输出排序好的数据。 Input示例 5 5 4 3 2 1 Output示例 1 2 3 4 5根据本题的数据范围,我们可以知道需要用到快排方可。原创 2016-04-16 12:05:21 · 777 阅读 · 3 评论 -
51Nod-1019-逆序数
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。 Input 第1行:N,N为序列的长度(n <= 50000) 第2 - N + 1行:序列中的元素(0 <= A[i] <= 10^9)原创 2016-04-17 02:52:38 · 1885 阅读 · 5 评论 -
NOIP-2009-02-分数线划定
描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根 据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150% (向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有 选手。 现在就请你编写程序划定面试分数线,并输出原创 2016-05-10 03:52:07 · 1725 阅读 · 0 评论 -
51Nod-1108-距离之和最小 V2
ACM模版描述题解这里完全可以将一个点的X、Y、Z拆解开来,分别求距离之和最小,然后加在一起即可。代码#include <iostream>#include <algorithm>using namespace std;const int MAXN = 1e4 + 10;int PX[MAXN];int PY[MAXN];int PZ[MAXN];int main(int argc, cons原创 2016-08-06 00:26:37 · 521 阅读 · 0 评论 -
51Nod-1110-距离之和最小 V3
ACM模版描述题解把W[i]当做X[i]点的个数,也就是说把一个权值为W[i]的X[i]点转化为W[i]个X[i]点,然后对X[i]排序,最后前后配对儿相减即可。这里需要强调的是要避免数据溢出,这一点坑了我半个小时之久…… 因为自己定义的P[a].P和power均为int型,所以在匹配的过程中,出现了int * int溢出的情况,我还傻傻的将其赋值给了long long型的sum,却忽略了——这里原创 2016-08-06 01:44:19 · 684 阅读 · 0 评论 -
51Nod-1097-拼成最小的数
ACM模版描述题解排序,然后按照输出规定输出即可。 这里的重点是排序准则: 如果两个数长度一样,则从小到大排;如果两个数长度不一样,则从高位开始比较,依然遵循从小到大排(比如说1、12,11、12,11、112、1122)。重要的事说一遍,细节决定成败! 要尽量考虑完全各种情况,尤其是当A是B前缀时的情况!!!如:4177、41774,4577、45774,194、194180,……代码#in原创 2016-08-06 18:41:12 · 704 阅读 · 0 评论 -
51Nod-1420-数袋鼠好有趣
ACM模版描述题解Water!!!没想到这都是四级题~~~这让人情何以堪。直接排序,二分查找一次,然后贪心即可。代码#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 5e5;int si[MAXN];int bs(int l, int h, int v){原创 2016-09-18 11:27:49 · 644 阅读 · 0 评论 -
51Nod-1153-选择子序列
ACM模版描述题解一开始想着有O(N)的解法,可是苦思冥想没能想出来,很尴尬…… 最后用排序递归解了,然后又学习了大牛们的高校O(N)解法。这道题的大致意思还真不好讲,我们可以通过样例来理解这道题: 模拟这道题,可以发现,最开始我们会选取12和10, 9 10 2 -1 3 -5 0 -3 1 12 5 8 -2 6 4接着,我们会选取的一定是3(一定在10和12之间),那么我们不难发现,原创 2016-08-25 03:33:07 · 964 阅读 · 1 评论 -
51Nod-1112-KGold
ACM模版描述题解做到这道题,一开始只考虑到了内存问题,而忽略了时间,所以用的优先队列存储,结果A了一半数据T了一半数据,代码One。然后看到一个初二小哥的代码,真的挺棒,总体思想是计算两条直线相交。 可以用二分搜索查找到第10000次超越发生在什么时刻。当然,这个判断函数很好写,就计算当前每一个人的金钱量,然后排序计算就行了。 首先以y轴为时间,x轴为金钱,之后就可以通过计算两条直线的交点来判原创 2016-08-24 18:47:27 · 871 阅读 · 2 评论 -
51Nod-1276-岛屿的数量
ACM模版描述题解先将岛屿和指令全部排序,然后过一遍指令,不断修正岛屿状态,将每条指令的结果转存一下,最后整体输出即可。复杂度Qlog(Q) + Nlog(N)……代码#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;const int MAXN = 5e4原创 2016-08-11 22:20:39 · 573 阅读 · 0 评论 -
51Nod-1282-时钟
ACM模版描述题解先将指针排序,然后获取指针刻度差值,接着,找到一个起点存储起来,用作后续的比较。这里起点的查找标准具体看函数,不做解释。求得有多少段相同的序列,累加相同状态的钟表对儿数即可(代码One)。这里可以进行一个比较好的优化,使用哈希+map(代码Two)。代码One:#include <iostream>#include <algorithm>#include <cstdio>usi原创 2016-09-01 03:08:36 · 815 阅读 · 2 评论 -
51Nod-1351-吃点心
ACM模版描述题解这道题是贪心问题,分为两种情况贪心: 第一种是选取的盒子左边界之和≥X; 第二种是C-没有选取的盒子的右边界之和≥X,即C-N个盒子右边界之和+选取的盒子右边界之和≥X。所以,分别按照左边界和右边界进行从大到小排序,逐个选取,获取两个结果,从这两个结果中取最优即可。代码#include <iostream>#include <algorithm>using namespace原创 2016-09-12 11:48:13 · 408 阅读 · 0 评论 -
51Nod-1105-第K大的数
ACM模版描述题解这里使用二分套二分查找即可。一般的二分查找是通过下标范围查找,而二分套二分是为了求两个数组组合乘积的问题,查找第K大的值,这里我们需要通过数据的范围查找,而不是下标的范围,这里需要两次快排。需要强调的一点是数据范围问题!!!一定要使用long long型,避免数据溢出!!!代码#include <iostream>#include <algorithm>#include <cs原创 2016-08-20 01:43:46 · 1323 阅读 · 4 评论