
练习-训练
文章平均质量分 72
slime_kirito
讨厌无力的自己
展开
-
暑假-树状数组-D - Cows
题意:有n头牛,每头牛都是自己的领域 [Si, Ei], 如果Si Ej - Sj,就认为第i 头牛比第j头牛强壮. 问对于每头牛,有多少头牛比它强壮。思路:相当于求对于第i头牛的区间的真子集个数,但是对于一维区间[Si,Ei]我们可以用二维的点(x,y)表示,那么他的真子集就相当 于这个点(x,y)左上方[即 0 的,原创 2015-08-11 13:27:27 · 319 阅读 · 0 评论 -
Vijos P1098合唱队形
合唱队形Time Limit: 1000 ms Memory Limit: 65536 KBTotal Submit: 95 Accepted: 54 DescriptionN位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身原创 2015-03-02 13:42:54 · 460 阅读 · 0 评论 -
Vijos P1028魔族密码
描述风之子刚走进他的考场,就……花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花)风之子:我呕……(杀死人的眼神)快说题目!否则……-_-###花花:……咦~~好冷~~我们现在要解决的是魔族的密码问题(自我陶醉:搞不好魔族里面还会有人用密码给我和菜虫写情书咧,哦活活,当然是给我的比较多拉*^_^*)。魔族现在使用一种新型的密码系统。每一个密码都是一个给定的仅原创 2015-03-02 11:52:46 · 543 阅读 · 0 评论 -
Vijos P1680 距离
背景简单的DP描述设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“abcb_c_”都是X的扩展串,这里“_”代表空格字符。如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位原创 2015-03-03 13:42:54 · 492 阅读 · 0 评论 -
POJ 2192 Zipper
一道简单DP【然而对于我来说还是难,看了很多题解才明白】题目大意:输入字符串a,b,c 要求判断c是否有a,b中的个字符保持原有顺序组合而成。算法思想:DP用dp[i][j]表示a的前0~i-1共i个字符和b的前0~j-1共j个字符是否构成c[i+j-1].状态转换方程:if(i>=1&&c[i+j-1]==a[i-1])dp[i原创 2015-07-14 15:00:17 · 372 阅读 · 0 评论 -
Vijos P1369难解的问题
一开始以为只要一次LIS,在更新时候不动第K个元素所在的位置即可,发现这样只能过百分之80的数据。看了下特解的说法,发现可以用2次LIS求,一次以K项为结尾,一次以K项为开始,分别求,然后把结果加起来即可。注意的是二分的一些修改。/*题意:求出的最长上升子序列必须含有第K项解法:分别求2次LIS(第一次:以第K项为结尾(一定要包含第K项)的最长LIS+原创 2015-07-17 19:58:30 · 595 阅读 · 0 评论 -
Vijos P1111小胖的水果
入门的LCS题目不知道为什么我用cin>>a+1不能AC 还得自己把2个串往后挪一般,汗。。。/*题意:2个串的长度-2个串的最长公共子序列。*/#include#includeusing namespace std;const int MAXN=105;int mymax(int a,int b){ if(a>b) { return a; } else {原创 2015-07-17 20:27:35 · 528 阅读 · 0 评论 -
Vijos P1680距离
求两个等长的扩展串A1、B1,使得A1与B1之间的距离达到最小。两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其他任意字符之间的距离为已知的定值K,空格字符与空格字符的距离为0注意数组的初始化。#include#include#includeusing namespace std;const int MAXN=2005;char a[MAXN],b[原创 2015-07-17 21:01:42 · 485 阅读 · 0 评论 -
Vijos P1104采药
入门的01背包题目,一维滚动数组。#includeusing namespace std;const int MAXN=105;struct Node { int f; int t;};Node a[MAXN];int mymax(int a,int b){ if(a>b) { return a; } else { return b; }}int m原创 2015-07-17 21:26:20 · 507 阅读 · 0 评论 -
Vijos P1577可怜的Oliver
入门LIS。#includeusing namespace std;const int MAXN=10000+1;struct Node{ int s; int e;};bool mymax(int a,int b){ if(a>b) { return true; } else { return false; }}int main(){ int t原创 2015-07-17 21:31:14 · 1033 阅读 · 0 评论 -
Vijos P1571笨笨的导弹攻击
入门LIS。练习题#includeusing namespace std;int n,temp,k=1;int dp[10005];void myswap(int m){ for(int i=1;i<k;i++) { if(i!=k-1) { if(i%2)//基数位置 { if(temp>=dp[i-1]&&temp>=dp[i+1]) {原创 2015-07-17 21:32:35 · 669 阅读 · 0 评论 -
Vojos P1133装箱问题
入门01背包,滚动数组。把重量和价值都看成同一个数a[i]。使箱子的剩余空间为最小,相当于让背包装尽可能多的东西。#includeusing namespace std;int mymax(int a,int b){ if(a>b) { return a; } else { return b; }}int main(){ int v,n; int a原创 2015-07-17 21:41:26 · 423 阅读 · 0 评论 -
Vijos P1198最佳课题选择
入门完全背包题。/*dp[i][j]:可选课题为1-i,必须完成课题数为j,所用的最少时间。注意:用大整型,数组的初始化,因为求得是最小值,无初始化的数据要制为无穷大。*/#includeusing namespace std;#define MAXN 10000001long long int mymin(long long int a,long long int b){原创 2015-07-18 10:51:14 · 454 阅读 · 0 评论 -
Vijos P1836HYS与七夕节大作战
01背包题,看了题解才知道由于v实在很小 所以可以把背包反过来做,dp[i]表示价值为i的选择方案所需要的最少的代价(时间)/*由于v实在很小 所以我们可以把背包反过来做dp[i]表示价值为i的选择方案所需要的最少的代价(时间),然后就是简单的O1背包啦~注意dp数组的初始化和dp[0]=0;*/#includeusing namespace std;const int MAXN原创 2015-07-19 09:44:40 · 573 阅读 · 0 评论 -
暑假-动态规划 III-O - Palindrome
题意:给你一个串。问:至少加多少个字符【任意位置都行】可以使串变成回文串。思路:设原序列S的逆序列为S' ,则这道题目的关键在于,最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度LCS问题。但是一般的LCS模板会MLE因为题目的N为5000.则要开一个dp[5001][5001]的数组。但是根据LCS的过程图可以得知,要求dp[i][j]得话,原创 2015-08-19 13:52:32 · 327 阅读 · 0 评论 -
湖南多校对抗赛(D-D)
#include/*题意:有3个只包含大写字母的字符串A,B,C。问能不能从 从A,B中分别拿出N/2个字符组成C串。(N为A的长度)。解法:直接统计26个大写字母在A,B,C串中出现的个数, 当C串中出现字母时,则看A,B串中这个字母出现的 次数之和(A,B这个字母最多为N/2)是否大于C对应 的个数,否则不能从A,B中拿出N/2个字符凑成C。*/#inc原创 2015-08-06 20:35:44 · 436 阅读 · 0 评论 -
暑假-树状数组-G - Ultra-QuickSort
这道题首先要理解下关于 数据离散化的知识 这是一道求逆序数的问题,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。逆序数求解方法:暴力,归并排序,树状数组,线段树比如:原创 2015-08-05 20:09:31 · 412 阅读 · 0 评论 -
暑假-树状数组-C - Ping pong
/*题意:有N个乒乓球员,每个人都有一个技能值和屋子的位置(按顺序从1-N),现在要组织 一些比赛,比赛为2个球员要在他们的位置之间找一个裁判,并且裁判的技能值在他们 的技能值之间,问最多能组织多少场比赛(2个选手和1个裁判只要有一个不同都算一场)思路:以每个人作为裁判为参照物,那么他当裁判能组织的比赛就是(在他的位置之前技能值比 他小的) 乘以 (在他的位置之后原创 2015-08-08 10:11:29 · 364 阅读 · 0 评论 -
暑假-动态规划 III-I - Function Run Fun
题意:题目已经把方法告诉你了,只需要特殊处理一下【预先表打出来】或者用记忆化搜索,因为有3个变量,所以需要开一个三维数组,因为3个变量的最大值为20,20,20 所以数组大小也可以确定了。思路:记忆化搜索,预处理打表。注意:每个条件放得位置,因为a,b,c可以说任意数,但是经过条件1和条件2之后,就可以把a,b,c变成 [0,20]之间的数,所以记忆化搜索的判断要放在条件1原创 2015-08-20 16:31:00 · 359 阅读 · 0 评论 -
POJ 2777 Count Color 暑假 —— 线段树1 ——H
Count ColorTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 29895 Accepted: 8919DescriptionChosen Problem Solving and Program design as an原创 2015-10-30 21:52:21 · 359 阅读 · 0 评论 -
HDU - 5137 How Many Maos Does the Guanxi Worth
How Many Maos Does the Guanxi WorthProblem Description"Guanxi" is a very important word in Chinese. It kind of means "relationship" or "contact". Guanxi can be based on friendship, but also can原创 2015-11-22 11:43:43 · 444 阅读 · 0 评论 -
POJ 2828 Buy Tickets 暑假—— 线段树1——C
Buy TicketsTime Limit:4000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescriptionRailway tickets were difficult to buy around the Lunar New Year in China, so we must get up原创 2015-10-31 16:07:26 · 412 阅读 · 0 评论 -
并查集应用举例
首先还是回顾和总结一下关于并查集的几个关键点:以树作为节点的组织结构,结构的形态很是否采取优化策略有很大关系,未进行优化的树结构可能会是“畸形”树(严重不平衡,头重脚轻,退化成链表等),按尺寸(正规说法叫做秩,后文全部用秩来表示)进行平衡,同时辅以路径压缩后,树结构会高度扁平化。虽然组织结构比较复杂,数据表示方式却十分简洁,主要采用数组作为其底层数据结构。一般会使用两个数组(par原创 2015-11-15 18:59:53 · 1722 阅读 · 0 评论 -
POJ 3278 Catch That Cow
题意: 给定两个整数n和k 通过 n+1或n-1 或n*2 这3种操作,使得n==k输出最少的操作次数思路: 3个方向的BFS【+1,-1,*2】注意: 因为数据比较大,直接套模板BFS会TLE,应该适当剪枝:1,当n>=k时,直接可知最少步数n-k【只能通过后退一步来到达位置k】如果此处进入BFS则会浪费很多时间!2,如果BFS到当前位置大于k,那么以后原创 2015-09-24 20:02:57 · 341 阅读 · 0 评论 -
暑假-二分图-C - Courses
题意:有p门课程,n个学生,然后又p行,每行都m个编号,代表课程i【i从课程1到课程p】被学生j选中【学生j愿意当课程i的课代表】,问能否能没门课程都有一个课代表【每个人只能选一门课程当课代表。思路:二分图的最大匹配,匈牙利算法模板。注意枚举的是课程,是课程选学生,并且判断是否满足所有课程都能选到学生。而不是枚举学生选课程【刚开始就被这个坑了下】。#include#inc原创 2015-08-28 21:02:03 · 329 阅读 · 0 评论 -
暑假- Trie树-(E - Remember the Word)
/*题意:给你一个母串,还有一本由字典串构成的字典,问你有几种方式可以用这本字典里的单词构成母串。思路:先用单词构造前缀树,然后用母串遍历查询,每次查询不会超过一百(字典串长度最长100),所以时间复杂度不会超过3 * 10 ^ 7,令d[i]表示从字符i开始的字符串的分解方案数DP:从前往后推:dp[j] += dp[i - 1];预处理dp[0]=1;母串从1-len. 从后原创 2015-07-29 09:20:32 · 427 阅读 · 0 评论 -
暑假- Trie树-(D - Phone List)
/*题意:给你一堆电话号码,如果没有任何一个人的电话号码是其他的电话号码的前缀,则输出“YES”,否则输出“NO”。思路:trie树,是不是其他号码的前缀只要判断最后一个数字出现的次数,若只出现一次则这个号码不会是其他号码的前缀,否则是其他号码的前缀。*/#include#includeusing namespace std;const int MAXM=100005;stru原创 2015-07-28 10:49:08 · 384 阅读 · 0 评论 -
暑假- Trie树-(A - Shortest Prefixes)
/*题意:找出能唯一标示一个字符串的最短前缀,如果找不出,就输出该字符串。 思路:trie树,所谓唯一最短前缀,就是这个前缀的最后一个字母在之前所有输入的字符串中只出现过一次(除了找不到的以外),构树的时候每个字母出现一次再所对应的value++,最后判断这个串的哪个字母是首个出现了一次的字母,则从这个串开始到这个首次出现了一次的字母结束就是对应的唯一前缀。*/#include#i原创 2015-07-28 09:53:25 · 457 阅读 · 0 评论 -
暑假- Trie树-(G - IMMEDIATE DECODABILITY)
/*题意:给你一堆2进制编码,判断是否任何一组编码都不是其他编码的前缀。思路:trie树,是不是其他编码的前缀只要判断最后一个数字出现的次数,若只出现一次则 这个号码不会是其他编码的前缀,否则是其他编码的前缀。 */#include#includeusing namespace std;const int MAXM=100005;struct Node{ int value;原创 2015-07-28 11:24:03 · 1103 阅读 · 0 评论 -
线段树2-Mayor's posters-POJ 2528
A - Mayor's postersTime Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uSubmit Status Practice POJ 2528DescriptionThe citizens of Bytetown, AB, could not原创 2015-11-09 19:54:17 · 502 阅读 · 0 评论 -
暑假- ac自动机-(A - Keywords Search)
#include#include#includeusing namespace std;const int MAXM=500010;const int MAXN=1000010;char str[MAXN];struct trie{ int root,trieN; int child[MAXM][26],value[MAXM],fail[MAXM]; int NewTrie(原创 2015-07-29 11:09:30 · 333 阅读 · 0 评论 -
暑假- ac自动机-(B - 病毒侵袭)
ac自动机入门题,但是还是写了很久。。。小错误经常出现,比如数组开得太小,忘记初始化。。。/*题意:中文题,详见HDU 2896思路:套AC自动机模板。注意:建trie树时,字符串的信息(病毒编号)存放着最后一个字母的value中,字符都是ASCII码可见字符,所以孩子节点有128个(0-127)每匹配到一种病毒就用数组(web)存起来,最后一次性输出*/#include#原创 2015-07-29 22:03:00 · 379 阅读 · 0 评论 -
暑假- ac自动机-(C - 病毒侵袭持续中)
明明题目没有说多组数据, 然后我就当作一组数据来做了。看来看去代码都没有错,但是一提交就WA,害我该了一个下午。天啊!去找题解才知道是多组数据。不要被省略”有多组数据“而欺骗了。/* 题意:中文题,详见HDU 3065 思路:套AC自动机模板。 注意:建trie树时,字符串的信息(病毒编号)存放在最后一个字母的 value中,病毒特征码只包含“英文大写字符”,所以孩子节点只需2原创 2015-07-30 19:48:35 · 499 阅读 · 0 评论 -
暑假-动态规划 III-J - The Peanutsw
题意:给你一个n*m的矩阵【相当于二维坐标系,x的范围是[1,n],y的范围是[1,m]】,每个位置都有一个数值【除0】,代表花生的数目,现在要求从坐标系的正上方出发,每走一个单位花费一秒,拿花生也得花一秒,一共K秒时间,并且规定拿花生的数目要从大到小的拿。问:在K秒内,正上方【road】出发再回到正上方【road】最多能拿多少花生?思路:按照题意拿花生的数目要从大到小的拿,即可用原创 2015-08-20 22:39:52 · 310 阅读 · 0 评论 -
湖南多校对抗赛(A - A)
/*题意:有一些长方形,面积为1*x或者2*x,现在要算出能把这些 长方形全部包含起来的长方形的大小(2*m),简单来说就是 给你一个宽为2的长方形,求出长最小为多少时能把全部长方形 包含起来。解法:因为大的长方形宽始终为2,而其他长方形宽为1/2。即当宽为2的 长方形直接放入(即长度直接加上对于得长度),而对于所以宽为1的 长方形,相当于把大的长方形分成2边原创 2015-08-06 20:16:57 · 785 阅读 · 0 评论 -
暑假-动态规划 III-D - FatMouse and Cheese
题意:有个n*n的迷宫,每个位置都有一定数量的cheese,每次只能从当前位置向(上,下,左,右)走1-k步,并且下一个位置要比当前位置的cheese数量多。问:现在老鼠从位置(0,0)出发,最多能获得多少cheese。思路:记忆化搜索,递归。#include#includeusing namespace std;const int MAXN = 105;int m原创 2015-08-19 11:09:27 · 421 阅读 · 0 评论 -
Vijos-P1204CoVH之柯南开锁
背景随着时代的演进,困难的刑案也不断增加...但真相只有一个虽然变小了,头脑还是一样好,这就是名侦探柯南!描述[CoVH06]面对OIBH组织的嚣张气焰, 柯南决定深入牛棚, 一探虚实.他经过深思熟虑, 决定从OIBH组织大门进入...........OIBH组织的大门有一个很神奇的锁.锁是由M*N个格子组成, 其中某些格子凸起(灰色的格原创 2015-09-01 17:04:29 · 686 阅读 · 0 评论 -
暑假-二分图-E - Girls and Boys
题意:有n个学生【从0到n-1】,每个学生都可能与其他学生有关系【或者喜欢其他学生】现在要找出尽量多的人使得这个集合的任意两人都没关系【互相都不喜欢】思路:相当于都最大点独立集【集合里任意两点都没有边】,最大点独立集=顶点数-最大匹配数。注意:这题的二部图两边集合的点【都是从0到n-1】都一样,所以相当于最大匹配求了两次最后求出的最大匹配数要除以2. 运行时间220MS原创 2015-08-29 18:25:36 · 321 阅读 · 0 评论 -
暑假-动态规划 III-(X - Cash Machine)
/* 题意: 有各种不同面值的货币,每种面值的货币有不同的数量,请找出利用这些 货币可以凑成的最接近且小于等于给定的数字cash的金额。 思路: 多重背包(01背包,完全背包,多重背包(2进制原理)2种背包的转换dp[i]表示能用所给硬币凑到最接近i的数目*/ #include using namespace std; co原创 2015-08-03 11:18:51 · 318 阅读 · 0 评论 -
暑假-动态规划 I-(Q - Washing Clothes)
/*题意:两个人洗衣服, 每种颜色的衣服有多件, 要求两人只能同时洗相同颜色的衣服, 求洗衣服的最短时间。分析:因为只能同时洗相同颜色的衣服, 因此可将不同颜色的衣服看为不同的组, 分别求出来每组的最短时间, 其和即为所求;每组最短时间就是0 1背包; 对于每种颜色洗它都有一个总时间,要求洗这种颜色的最少时间, 就是求看能不能一个人洗这种颜色的衣服达到总时原创 2015-07-22 20:04:13 · 444 阅读 · 0 评论