3. ACM-ICPC
文章平均质量分 52
玄苦大师233
机会往往是长期准备和酝酿的而不能只靠一时的主动与激情所以认真写好技术博客吧
新博客 =》https://chenguolin.github.io/
展开
-
【ICPC-1】hdu 4648 Magic Pen 6
点击打开hdu 4648思路: 扫描分析:1 设这列数前i项和为s[i],则一段连续的数的和 a[i]+a[i+1]+...+a[j-1]+a[j]=s[j]-s[i-1],所以这段连续的数的和能被m整除的条件就是 (s[j]-s[i-1]) % m == 0,即 s[j]%m-s[i-1]%m == 02 因此,只需要每一个余数找使s[i]%m等于该余数的最小的i,和s[j]%m等于...原创 2013-08-07 09:00:15 · 1116 阅读 · 0 评论 -
【ICPC-2】 CROC-MBTU 2012, Final Round (Online version, Div. 2)
点击打开链接A思路:枚举判断分析:题目要求找到最少的划分数,那么我们只要对这n个数进行枚举判断即可。代码:#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;#define MAXN ...原创 2012-11-27 23:09:39 · 978 阅读 · 0 评论 -
【ICPC-3】 Beta Round #9 (Div. 2 Only)
点击打开链接cf#9A思路:求gcd然后化简#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int gcd(int a ,int b){ return b == 0 ? a :...原创 2012-11-30 16:08:44 · 823 阅读 · 0 评论 -
【ICPC-4】 Beta Round #10
点击打开链接cf#10A思路:模拟分析:1 题目要求找到总共的电脑的消耗。题目明确指出在n个时间段之内电脑都是属于第一种状态,并且如果不是第一种状态只要移动鼠标或按键盘马上变为第一种状态。2 题目还指出每一组输入都保证L<R,并且Ri-1<Li。那么我们只要每输入一个就处理一个即可。代码:#include<iostream>#include&l...原创 2012-12-05 17:44:56 · 748 阅读 · 0 评论 -
【ICPC-5】Codeforces Round #153 (Div. 2)
点击打开链接cf #153A思路:暴力分析:1 题目给定n个数 n<=100,要求一个区间内做^能够得到的最大值2 n最大为100,暴力枚举区间即可。代码:#include<iostream>#include<cstdio>using namespace std;#define MAXN 110int n;int num...原创 2012-12-08 14:07:51 · 726 阅读 · 0 评论 -
【ICPC-6】Codeforces Round #154 (Div. 2)
点击打开链接codeforce#154A思路:水题分析:题目要求‘B’和‘G’是交替出现,所以应该要注意判断一下男生和女生的数量,然后是先B还是先G。代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespa...原创 2012-12-23 22:56:44 · 776 阅读 · 0 评论 -
【ICPC-7】Codeforces Beta Round #8
点击打开链接A思路:正反字符串各自判断一次是否有对应的两个子串分析:1 题目给定一个字符串str,然后给定两个不同时间段内看到的子串s1 , s2,判断是哪一种情况。2 我们知道两个时间段内那么看到的字符串是有间隔的,那么如果我们怎么知道是否是“向前”“向后”“都有”“没有”这四种答案中的哪一种呢?其实我们知道如果给定的两个子串都是给定的字符串str的子串,那么我...原创 2013-02-26 19:41:17 · 768 阅读 · 0 评论 -
【ICPC-8】Codeforces Beta Round #11
点击打开链接A#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int MAXN = 2010;int n , d;int num[MAXN];int ma...原创 2013-02-28 08:30:30 · 738 阅读 · 0 评论 -
【ICPC-9】Codeforces Beta Round #1
点击打开链接A#include<iostream>#include<cstdio>using namespace std;long long n , m , a;int main(){ long long sum; while(cin>>n>>m>>a){ long long...原创 2013-04-30 22:16:35 · 952 阅读 · 0 评论 -
【ICPC-10】Codeforces Beta Round #2
点击打开链接A/*思路:模拟分析:1 题目要求的在游戏结束后最大的点的值的玩家,或者具有相同点值的情况下最早出现*/#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>using ...原创 2013-04-30 22:19:23 · 857 阅读 · 0 评论 -
【ICPC-11】Codeforces Beta Round #3
点击打开链接A#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>#include<map>using namespace std;#define MAXN 500010#define N 10int ans...原创 2013-04-30 22:21:05 · 859 阅读 · 0 评论 -
【ICPC-12】Codeforces Beta Round #4 (Div. 2 Only)
点击打开链接A#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;int main(){ int n; while(scanf("%d" , &n) != EOF){ ...原创 2013-04-30 22:24:50 · 882 阅读 · 0 评论 -
【ICPC-13】Codeforces Beta Round #5
点击打开链接A#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;#define MAXN 110int ans , cnt;int m...原创 2013-04-30 22:27:03 · 1044 阅读 · 0 评论 -
【ICPC-14】Codeforces Beta Round #6 (Div. 2 Only)
点击打开链接A#include<iostream>#include<cstdio>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int l[4];int main(){ while(scanf(...原创 2013-04-30 22:28:58 · 964 阅读 · 0 评论 -
【ICPC-15】Codeforces Beta Round #7
点击打开链接A#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 8char G[N][N];int main(){ while(scanf("%s" ,...原创 2013-04-30 22:31:29 · 925 阅读 · 0 评论 -
【ICPC-16】Codeforces Beta Round #12 (Div 2 Only)
点击打开链接A#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;char str[3][3];bool isOk(){ for(int i = 0 ; i < 3 ; i...原创 2013-04-30 23:18:57 · 901 阅读 · 0 评论 -
【ICPC-17】Codeforces Round #182 (Div. 2)
点击打开链接cf 182A/*题目的真正意思是问能否由r-l+1个数组成和为0*/#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN = 2*100010;...原创 2013-05-07 20:45:44 · 1041 阅读 · 0 评论 -
【ICPC-18】Codeforces Round #209 (Div. 2)
点击打开链接A. Table题意:水题#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;int main(){ int n , m , x; int ans = 4;...原创 2013-11-07 20:44:09 · 1041 阅读 · 2 评论 -
【ICPC-19】poj 2926 Requirements
点击打开poj 2926思路: n维空间计算最远的曼哈顿距离分析:1 题目给定n个5维的点,要求最远的曼哈顿距离2 求最远曼哈顿距离,对于一个n维的空间,其中两点的曼哈顿距离为:|x1-x2|+|y1-y2|+... , 两点的坐标分别为(x1,y1……)和(x2,y2,……)3 考虑二维的情况对于二维空间的两个点(x1,y1)和 (x2,y2),那么曼哈顿距离为|x1-x2|+...原创 2013-08-13 21:11:02 · 1298 阅读 · 0 评论 -
【ICPC-20】hdu 4666 Hyperspace
点击打开hdu 4666思路:n维空间计算最远的曼哈顿距离分析:1 这一题和poj2926很像,但是poj那题是静态的而这边则是动态的,对于静态的话我们知道只要去求出2^n状态下的最大值和最小值,然后求最大的差值即为ans2 但是对于动态的来说我们需要去维护每一个状态的最大值和最小值,因此我们利用multiset来保存每一个状态下的所有的值,因为multiset是自动排序那么我们就可以很...原创 2013-08-14 09:56:16 · 1410 阅读 · 0 评论 -
【ICPC-21】poj 1850 Code
点击打开链接poj 1850思路:组合数学+排列组合分析:1 题目要求的是给定一个字符串判断是否满足题目的要求,如果是输出第几个,如果不是则输出-1.2 那么首先我们应该先判断这个字符串是否是符合题目的字符串,如果不符和直接输出-1.3 在字符串符合的情况下,那么我们就可以知道长度小于len的字符串都是符合条件的。 现在长度为n的字符串最多可以到达的编号就是num = C(...原创 2012-11-12 22:31:27 · 685 阅读 · 0 评论 -
【ICPC-22】poj 1150 The Last Non-zero Digit
点击打开链接poj 1150思路:组合数学+排列组合分析:1 求排列数A(n , m)的末尾第一个非0数。2 总结一下,求n!最后一个非0位的步骤如下:step1:首先将n!中所有2,5因子去掉;step2:然后求出剩下的一串数字相乘后末尾的那个数。step3:由于去掉的2比5多,最后还要考虑多余的那部分2对结果的影响。step4:output your answer!...原创 2012-11-13 21:26:54 · 926 阅读 · 0 评论 -
【ICPC-23】uva 11538 Chess Queen
点击打开链接题意:给定一个n*m的矩阵,问有多少种方法放置两个相互攻击的皇后?规定在同一行同一列和同对角线的能够相互攻击思路:1 先考虑同一行的情况,n行就有n种情况,每一行有m*(m-1)种,总的是n*m*(m-1);2 考虑同一列的情况,m列就是m种情况,每一列有n*(n-1)种,总的是m*n*(n-1);3 最后考虑同对角线的情况,因为n > m和 n <= ...原创 2013-11-17 23:27:58 · 1027 阅读 · 0 评论 -
【ICPC-24】uva 11401 - Triangle Counting
点击打开链接题意:给定一个n表示有n个1~n的数,现在要从这里面选出3个不同的整数问可以组成三角形的个数思路:1 n的上限是10^6,O(n^2)以上的时间复杂度都无法满足要求2 设最大的变长为x,另外两边的为y和z并且x y 和z是不同的,那么有y+z > x,因此就有x-y < z < x 根据这个不等式我们知道,y = 1时无解,y = 2时有1个解...原创 2013-11-18 09:17:13 · 1347 阅读 · 0 评论 -
【ICPC-25】uva 11806 - Cheerleaders
点击打开链接题意:在一个n行m列的矩形里面放k个相同的石子,要求第一行,最后一行,第一列,最后一列都要有石子。问有几种方法?思路:1 如果题目没有要求“第一行,最后一行,第一列,最后一列都要有石子”,那么答案就是C[n*m][k],我们用C[i][j]表示i个里面选择j个的组合数。2 设满足“第一行没有石子“的集合为A,“第一列没有石子“的集合为B,“最后一行没有石子“的集合为C,...原创 2013-11-18 12:21:58 · 1755 阅读 · 0 评论 -
【ICPC-26】poj 1330 Nearest Common Ancestors
点击打开链接poj 1330思路:LCA+离线Tarjan算法分析:1 LCA用于找到一棵树或者一个图中找到两个节点的最近的祖先问题。2算法: 1: Tarjan算法基于深度优先搜索的框架,对于新搜索到的一个结点,首先创建由这个结点构成的集合 2: 再对当前结点的每一个子树进行搜索,每搜索完一棵子树,则可确定子树内的LCA询问都已解决。 3: 其他的LCA询问的结...原创 2012-10-08 19:31:24 · 935 阅读 · 0 评论 -
【ICPC-27】poj 1470 Closest Common Ancestors
点击打开链接poj 1470思路:LCA+Tarjan离线算法分析:1 处理输入的时候全部用scanf,不然会WA。注意掌握scanf的使用,scanf的灵活之处2 因为有多次询问,所以要开个ans数组记录公共祖先的次数3 有关字符串的处理: 1 空白字符会使scanf在读入的时候略去其中的一个或多个空白字符 。 2 getchar()使用来读入一个字符,所以可以单独处理一个字符...原创 2012-10-09 00:29:14 · 882 阅读 · 0 评论 -
【ICPC-28】poj 1986 Distance Queries
点击打开链接poj 1986思路:LCA+Tarjan离线算法+并查集分析:1 LCA指的是一棵有根树上两个点的最近公共祖先,或者指的是图上两个点的最短路径。2 这一题的边数最大40000,还有k(k<=10000)次询问,如果利用最短路的算法肯定TLE。所以这个时候我们选择LCA,假设dis[x]是x到根节点的路径长度,那么(i , j)两点的最短路径为dis[i]+dis...原创 2012-10-09 22:50:34 · 919 阅读 · 0 评论 -
【ICPC-29】FZU 2039 pets
点击打开链接FZU2039思路:二分图水题分析:只要建模然后套模板ok代码:/*DFS求二分图的最大匹配*/#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define MAXN 11...原创 2012-11-19 00:42:10 · 1019 阅读 · 0 评论 -
【ICPC-30】hdu 2063 过山车
点击打开链接hdu2063思路:二分图最大匹配分析:1 题目要求的是给定k条边,然后求出最大的能够匹配的边数2 很明显的二分图的最大匹配,利用DFS匈牙利算法求出最大的匹配边数代码:#include<iostream>#include<algorithm>#include<cstdio>#include<cstring...原创 2012-11-19 13:15:53 · 880 阅读 · 0 评论 -
【ICPC-31】RQNOJ 石子合并
点击打开链接思路: 区间dp分析:1 很多人可能看到这一题首先想到的是贪心,但是很不幸的是这道题的贪心做法是错误的,因此正解是dp2 不管怎么合并,总之最后总会归结为2堆,如果我们把最后的两堆分开,左边和右边无论怎么合并都必须满足最优合并方案,整个问题才能是最优的3 题目是一个环,我们可以把环变成链那就是在后面在加上去,那么最后的ans一定是dp[1][n-1],dp[2][n]......原创 2013-05-21 22:18:33 · 1099 阅读 · 0 评论 -
【ICPC-32】uva 712 S-Trees
点击打开链接#include <cstdlib>#include <cctype>#include <cmath>#include <cstdio>#include <cctype>#include <cstdlib>#include <cstring>#include <iost...原创 2012-07-03 19:30:58 · 1054 阅读 · 0 评论 -
【ICPC-33】uva 10305 - Ordering Tasks
点击打开链接题目意思:给定两个数n , m .n是任务的编号从1~n, m则是有m个关系式.求出一种做该任务的顺序(答案不唯一)。解题思路:这一题是很简单的拓扑排序,直接利用拓扑排序的模板,然后注意输出就可以了。代码://直接利用拓扑排序的模板#include <iostream>#include <cstdio>#include <cs...原创 2012-07-08 17:50:19 · 1021 阅读 · 0 评论 -
【ICPC-34】uva 586 Instant Complexity
点击打开链接uva 586思路:递归模拟分析:1 题目是一道给定一段程序代码的球时间复杂度2 根据题目的意思,我们可以利用栈和递归的方法,但是栈的方法比较不好写,所以我们利用递归的思路来写3 当我们遇到LOOP的时候,我们就递归下去,当遇到OP的时候我们就去计算当前这一层的复杂度,遇到END的时间retuen即可4 注意最后的输出代码:#in...原创 2013-08-02 15:49:18 · 1120 阅读 · 0 评论 -
【ICPC-35】hdu 2222 Keywords Search
点击打开链接hdu 2222思路:AC自动机的模板题分析:AC自动机的三个步骤1 利用文本串建立字典树2 在字典树上面构造失配指针3 在字典树上面匹配,求出个数。代码:#include<iostream>#include<cstdio>#include<cstring>#include<queue>#includ...原创 2012-12-05 21:06:21 · 797 阅读 · 0 评论 -
【ICPC-36】hdu 2896 病毒侵袭
点击打开链接hdu 2896思路:AC自动机分析:1 题目输入n个字符串,然后输入m个源码串。对每一个源码串要求找到里面包含了几个字符串,如果有包含则按照从小到大输出字符串的编号,否则不输出。2 典型的ac自动机。首先利用n个字符串建立字典树并且在字典树上面求出失配指针。然后对每一个输入的源码串进行find()即可。3 ASCLL字符表可见字符(可打印字符)从32~126...原创 2012-12-06 18:02:22 · 722 阅读 · 0 评论 -
【ICPC-37】hdu 3065 病毒侵袭持续中
点击打开链接hdu 3065思路:AC自动机模板分析:1 题目要求找出相应的字符串在源码串中出现的次数,并且告诉我们字符串只有大写字母。其实解法是一样的,只是别被大写字母这个给限制了,还是相当于建立trie,但是不能单建立大写字母的trie树。2 当匹配到一个单词的时候就把单词对应的编号对应的个数加加。代码#include<iostream>#include...原创 2012-12-06 22:33:06 · 736 阅读 · 0 评论 -
【ICPC-38】hdu 1277 全文检索
点击打开链接hdu 1277思路:AC自动机模板题分析:1 只要把输入处理成一个字符串,然后对关键字建立trie树和求next2 注意题目是说按照匹配到的顺序输出,所以这个地方注意一下。代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorit...原创 2012-12-08 16:25:43 · 912 阅读 · 0 评论 -
【ICPC-39】hdu 3695 Computer Virus on Planet Pandora (没过+TLE)
/*hdu 3695 TLE 题*/#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;#define MAXN 5100010#define...原创 2012-12-18 22:06:01 · 997 阅读 · 0 评论 -
【ICPC-40】BUNOJ 11552 Dominating Patterns
点击打开链接bnuoj11552思路:AC自动机模板题分析:1 先对n个模板串构造trie树并且求出失配边2 然后在文本串上面查找,找到是单词节点就把当前的单词个数加1,最后枚举输出即可。代码:#include<iostream>#include<cstdio>#include<cstring>#include<que...原创 2012-12-18 23:19:58 · 878 阅读 · 0 评论