上一页 1 ··· 35 36 37 38 39 40 41 42 43 ··· 50 下一页
摘要: 题意:给定一个串 MI,问你进行一下三种操作,(1)M后面的那一段复制并接在串后面 (2)‘III’ 变为'U' (3)消除'UU'给定你一些目标串,问你是否经过变换后(不限步数)能否把从‘MI’变为目标串解题思路:逆向推,把U变为I,所有I的个数必须是 2^k 或者 2^k - 6*x ,所以我们就枚举k ,看是否可行解题代码: 1 // File Name: 4611.cpp 2 // Author: darkdream 3 // Created Time: 2013年08月09日 星期五 15时58分50秒 4 5 #include 6 #include 阅读全文
posted @ 2013-08-09 16:39 dark_dream 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个N长的序列,有n个人编号1-n , 第i个人和第i-1,i+1 互相为朋友,询问多次,问你询问的区间里面有多少堆(可以互相认识)朋友:解题思路:开始一想有点像并查集的味道,不过想到LSS(我的队友,图论大牛)博客里面说的是线段树加离线(http://blog.csdn.net/u010126535),就按这个方面去想了,这题的主要思想是对询问的左端点按从大到小排序,然后对序列从后往前扫,对于A[I] 如果 A[I]- 1 或A[I] +1 出现过的话,更新其(它的两个邻居位置)线段树节点(+1);然后询问的答案就是这个区间长度-区间和,(这里主要是因为总是有一个连续序列排在最后面 阅读全文
posted @ 2013-08-08 21:27 dark_dream 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个序列,动态的询问你这个序列的某个区间两两最大的最大公约数:解题思路:一个区间的最大GCD 就是一个在这个区间出现两次的最大约数。。。。这个题的解题思路是,从后往前扫描,对于A[I]的约数,如果后面出现过,则更新后面那个数的线段树节点。离线的原因主要是因为我们目前的状态,只能解决当前的问题,而且后面的询问,又依赖于现在的状态,所以就要对询问的左区间进行从大到小的排序,然后扫描,如果 i 等于一个询问的左边界,则更新询问。解题代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include... 阅读全文
posted @ 2013-08-08 15:05 dark_dream 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 未解 阅读全文
posted @ 2013-08-07 16:06 dark_dream 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个花盆,最开始都是空的,有两种操作,第一种从第i个花盆开始,给你k朵花,然你把空的花盆插上花,插到最后还有花,就把花丢掉,(输出开始插的花盆编号和最后一朵花的花盆编号,如果不能插一朵,就输出Can not put any one.\n),第二种操作就是从I到J花盆,清除其中的花(输出清除的花数)。解题思路:线段树的基本操作,解题思路一是 线段树+ 二分插的位置,还有一种是 直接线段树(利用性质直接查找插花的位置)解题代码: 1 #include 2 #include 3 #include 4 #define MAXN 50005 5 struct node{ 6 ... 阅读全文
posted @ 2013-08-07 13:11 dark_dream 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题意:给定n个节点和m条连线,每个节点和每条连线都有一定的权值,如果有一个人取得了一条连线的两个节点,则他获得这条连线的权值,问按照最优策略,两个人的差是多少解题思路:把桥的权值分到两个节点上去,对答案没有影响解题代码: 1 #include 2 #include 3 #include 4 const int maxn = 111111; 5 long long a[maxn]; 6 int cmp(const void *a , const void * b) 7 { 8 if( *(long long *)a > *(long long *)b) 9 return... 阅读全文
posted @ 2013-08-07 00:07 dark_dream 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个序列,问你最多划掉多长的连续序列使得原序列和现序列%m的值相同解题思路:解这个题有点曲折,c语言中 -3%5 = -3 , 但是题目要求应该是 2,所以在解题的时候出现了问题,这里是有 O(n)的算法的, 利用hash表记录 前i项和 第一次出现某余数的位置,如果这个余数出现过,则可以去除掉 (我们要去掉m的倍数),然后取最长的就可以了。解题代码: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #includ... 阅读全文
posted @ 2013-08-06 19:46 dark_dream 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个m面的色子。投色子,然后问你期望值为多少次时 后n次都相同或后n次都不相同解题思路:完全YY的,0的话就是关于m的等比数列和,如果是1的话,就是一个类似于秦九韶算法的分数和;;;比赛后八分钟A了。。可惜。官方:设dp[i]表示当前在 已经投掷出 i个 不相同/相同 这个状态时期望还需要投掷多少次,然后dp[i] 有如下等式:相同: //dp[0] = 1 + dp[1] //dp[1] = 1 + ((m-1)dp[1] + dp[2]) / m //dp[i] = 1 + ((m-1)dp[1] + dp[i+1]) / m //... //dp[n] = 0;不相同: //d 阅读全文
posted @ 2013-08-06 19:41 dark_dream 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 题意:给定你海报,覆盖区间,问你最后可以看见多少海报 解题思路:线段树的离散化问题, 把大的数值变成小的数值,然后区间覆盖统计就行了,但是要注意不相邻的数值在离散化的时候要处理,不然会导致 1-10 1-4 6-10 这样结果变为两个海报!解题代码: 1 #include 2 #include 3 #include 4 #define MAXN 51000 5 int hs[MAXN]; 6 struct step 7 { 8 int x, y ; 9 }steps[MAXN]; 10 int qu[MAXN]; 11 struct node 12 { 13 ... 阅读全文
posted @ 2013-08-04 14:49 dark_dream 阅读(233) 评论(0) 推荐(0) 编辑
摘要: ZOJ 2362(二分匹配)HDU 4631Palindrome subsequence(DP+组合数学) 阅读全文
posted @ 2013-08-04 09:54 dark_dream 阅读(134) 评论(0) 推荐(0) 编辑
上一页 1 ··· 35 36 37 38 39 40 41 42 43 ··· 50 下一页