03 2014 档案
摘要:A.随便搞,我偷懒用了一个map。手贱给again加一个感叹号还WA了一发,o(╯□╰)o#include #include using namespace std; map mp; int main() { int n; scanf("%d",&n); int mm,ss,v; scanf("%d:%d",&mm,&ss); v = mm * 60 + ss; for(int i = 1;i #include #include #include #include using namespace std; int a[205],m
阅读全文
摘要:说了一大堆,其实就是求一个最长上升子序列,二分优化到nlogn就不会超时啦 #include #include #include #include using namespace std;const int maxn = 500000 + 5;const int INF = INT_MAX / 2;int top[maxn],r[maxn];int main() { int n...
阅读全文
摘要:类似滑雪问题,在一个矩阵中求最大的上升路径累加和,并且在一个点一次可以走长度最大的为k的直线。并且起始位置一定是矩阵的左上角1,1。 把每个节点按照高度从低到高排序,然后枚举所有可能到达当前点的值,选其中最大的一个和当前点相加即可 #include #include #include using namespace std;struct Point { int x,y,h; ...
阅读全文
摘要:题意大概是,给你一个字符串,如果该字符串的某一个前缀Si是由若干个相同的字符串循环构成,就输出i和最短循环节长度利用KMP算法里面失配函数可以解决这个问题,失配函数f(i)可以定义为字符串的前缀Si-1中最长的与真前缀相等的真后缀的长度。如果当前字符串是由若干个字符串循环构成的话,必然有最长真后缀的长度加上最短循环节(也就是字符串开头的第一个循环节)长度的和应该恰好等于i#include #include using namespace std;const int maxn = 1000005;char str[maxn];int f[maxn];inline void getfail() {
阅读全文
摘要:KMP模板#include #include using namespace std;const int maxn = 105;int f[maxn];char pat[maxn],str[maxn];inline void getfail() { int len = strlen(pat); f[0] = f[1] = 0; for(int i = 2;i < len;i++) { int j = f[i - 1]; while(j && str[i - 1] != str[j]) j = f[j]; if(str[i - 1] =...
阅读全文
摘要:Problem Description搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬两件东西,左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的疲劳度为(6-3)^2 = 9.现在可怜的xh
阅读全文
摘要:题意大概是给你一幅柱状图,寻找里面最大的长方形的面积。一类很典型的动态规划问题,我之前一直不会。QAQl[i] r[i]分别表示以i这个柱子为长方形的高,两边最多能够延伸到的位置。如果l[i]的左边那一个的高度大于等于当前的高度,那么就可以延伸下去,一直更新到不能延伸下去为止。即 while(h[l[i]-1]>=h[i]) l[i]=l[l[i]-1];右边以同样的方式处理即可。这个模型可以变换成很多情况,需要好好理解#include #include using namespace std;const int maxn = 100001;int height[maxn],left_b
阅读全文
摘要:最大子矩阵和问题=。=最朴素的方式是枚举矩阵左上角的点和右下角的点,然后计算和,复杂度是n^4这里可以利用动态规划来进行优化枚举子矩阵的起始行i和终止行j,然后将其求和使其转化为一维的数组,然后利用动态规划在O(n)的复杂度内求出最大和即可。复杂度是n^3对于n#include #include #include using namespace std;const int maxn = 105;const int INF = INT_MAX / 2;int sum[maxn][maxn],v[maxn][maxn],t[maxn];int maxsum(int *f,int n) { i...
阅读全文
摘要:题意大概是,2,3,5,7的和他们的整数倍数的数都称为Humble Number,将所有的Humble Number从小到大排列,现在输入N(N #include #include #include using namespace std;typedef long long LL;#define min_t(a,b) (((a)<(b))?(a):(b))LL min(LL a,LL b,LL c,LL d) { return min_t(min_t(a,b),min_t(c,d));} LL dp[6000];void init() { int l1 = 1,l2 = 1,l3 ...
阅读全文
摘要:Problem DescriptionGardon和小希玩了一个游戏,Gardon随便想了一个数A(首位不能为0),把它去掉一个数字以后得到另外一个数B,他把A和B的和N告诉了小希,让小希猜想他原来想的数字。不过为了公平起见,如果小希回答的数虽然不是A,但同样能达到那个条件(去掉其中的一个数字得到B,A和B之和是N),一样算小希胜利。而且小希如果能答出多个符合条件的数字,就可以得到额外的糖果。 所以现在小希希望你编写一个程序,来帮助她找到尽可能多的解。 例如,Gardon想的是A=31,B=3 告诉小希N=34, 小希除了回答31以外还可以回答27(27+7=34)所以小希可以因此...
阅读全文
摘要:Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。 1) 当前的话与前面的某些真的话冲突,就是假话; 2)
阅读全文

浙公网安备 33010602011771号