11 2013 档案

HDU 1272 小希的迷宫
摘要:一道很简单的并查集建模之后就是判断一个无向图有没有环就行了注意没有任何数据的时候是要输出一个“yes”,如果输入两个相同的点的时候,应该不判断贴一下代码先#include #include #define maxn 100100int fa[maxn];int find(int x) { return x==fa[x] ? x : fa[x] = find(fa[x]);}void union_set(int x ,int y) { fa[x] = y;}bool fail = false;int vis[maxn];void init(){ fail = false; ... 阅读全文

posted @ 2013-11-29 16:28 从此以后 阅读(145) 评论(0) 推荐(0)

HDU 1273 漫步森林
摘要:比赛的时候是看见人家A得很快,但是一看的时候觉得没什么头绪,画了一个六边形的灵感来了,就YY一下第一次提交写错了结束条件,之后意淫下公式交上去A了。用五边形来解释:1.设有五个点1,2,3,4,5,2.从1开始,可以走的边有4条3,算上往返,只有2条路可走。4.用于给出两两个点之间都有路径,那么可以假设任意一条都可以成功通过,只需算出每个点旁边有多少条边,折半就是路径数目#include int main(){ int n , ans; while(scanf("%d",&n) , n) { ans = (n-1)/2; printf("%d\n" 阅读全文

posted @ 2013-11-28 17:14 从此以后 阅读(200) 评论(0) 推荐(0)

HDU 1269 迷宫城堡
摘要:比赛的时候很少做图论的题目,今天开了VC一个来做,貌似是队赛的题目的,一个人挑其他队。。。不过题目相对简单啦,最后排在第4位。这道题是简单的建模题目,将其看成强连通分量就行了。第一wa竟然是没看清楚结束条件,好吧,坑了。。#include #include #include #include using namespace std;const int maxn = 10001;int pre[maxn] , lowlink[maxn] , sccno[maxn],dfs_clock, scc_cnt;vector g[maxn];stack S;int n , m;inline int ... 阅读全文

posted @ 2013-11-28 17:05 从此以后 阅读(258) 评论(0) 推荐(0)

HDU 1026 Ignatius and the Princess I
摘要:大概花了一天的时间来写这道题,看了别人的题解,其实没有什么不对劲,就是自己的方法并不是太协调早上做出来的程序其实整体上已经很不错了,但还有一点不正确的地方,就是记录路径的方式不正确。不知算不算是水题,反正做了很久了···1.这道题的路径记录要注意怪兽出现的地方:当前如果出项怪兽,那么记录的方法要记录在当前点还是每个下个搜索点2.输出路径的时候可以采取递归的方式,这道题其实递归输出最好了。3.看别人的题解都是用了优先队列,可能对于这个题目的数据,没有用优先队列对于时间复杂度的影响不大,都是0ms秒过的4,下面代码用普通队列进行搜索,记录方式有很多,这里用二维转一维方 阅读全文

posted @ 2013-11-27 16:10 从此以后 阅读(276) 评论(0) 推荐(0)

HDU 4175 Class Schedule
摘要:今年三月份的选拔赛的题目,也是我出的最后一题,当时很快就完成了,但是今天一做就是3小时了。贡献了wa不少题意:一共有C种课程,每个课程都有T节课。C1,C2,C3..Cn的不同类的课连续上,而且同一种课的不同class是一个时间上的问最后去到L点是最小消耗是多少1.每移动到另外一个课室位置pos时,都消耗abs(位置差)的能量值,上每一节课就花费在当前点的能量值2.绝对只能暴力,从数据上分析是不行的,25*1000*1000,超过理论限制,但是杭电数据水点。62水过就行。3.今天是用一个位置数据记录状态转移的,每次都从上次状态转移到当前状态,并记录当前值。但是后来用一组数据测试wa掉了。4.代 阅读全文

posted @ 2013-11-26 12:11 从此以后 阅读(366) 评论(0) 推荐(0)

HDU 1069 Monkey and Banana
摘要:一道非常简单的动态规划,做了很久。分析一下数据才知道排序写错了。1.给出n种规格的箱子,每种有若干个2.将箱子叠起来,求最高的高度,并符合一定要求3.限制条件是叠起来的箱子每个在下面的箱子都比上面的箱子的长宽大。理解题意很容易就可以入手了。#include #include using namespace std;#define maxn 1000int n;struct BLO{ int x,y,z; bool operator < (const BLO& rhs) const{ return x < rhs.x || ... 阅读全文

posted @ 2013-11-26 08:09 从此以后 阅读(202) 评论(0) 推荐(0)

matlab 卷积公式与矩阵实现
摘要:其实是很简单的代码,叫了翔哥给代码给我改,果断将JAVA改成C++,太简单了。。我不知道代码是什么意思,贴个记录先。//matrix multiple opr#include #include using namespace std;#define maxn 500int n , m , a, b , r , s , A1[maxn][maxn]; int A[maxn][maxn],B1[maxn][maxn] ,B[maxn][maxn];int R[maxn][maxn];void conv2(){ int e = 0; for(int i=0;i= 0 && j-p & 阅读全文

posted @ 2013-11-25 15:47 从此以后 阅读(736) 评论(0) 推荐(0)

总结
该文被密码保护。

posted @ 2013-11-25 14:47 从此以后 阅读(0) 评论(0) 推荐(0)

HDU 1172 猜数字
摘要:很久以前做过了,当时以为是搜索,不大会做。后来还是看别人的方法,觉得不是简洁。今天再做一次,1Y了。水题一道,但有很多技巧1.如果有多个答案,那就不是正确的解2.正确的对位数是很容易求的,难的是才对的那个要仔细写。3.代码的方法直接纯暴力了。#include #include #define maxn 120int n;int gus[maxn] , pos[maxn] , rig[maxn];int test_pos(int a,int b){ int cnt = 0; while(a > 0){ if(a%10 == b%10) cnt++; a/... 阅读全文

posted @ 2013-11-24 15:54 从此以后 阅读(315) 评论(0) 推荐(0)

HDU 4500 小Q系列故事——屌丝的逆袭
摘要:算是一道模拟题吧要注意加减就行了,可是我搞错了,wa了11次,嘿嘿,粗心啊。。。#include #include #define maxn 30int n , m , pos[maxn][maxn] , ans[maxn][maxn];int dx[] = {1,0,-1,0};int dy[] = {0,1,0,-1};int _x,_y,_max;void init(){ _max = -10001; for(int i=0;in || nym) continue; if(pos[x][y] > 0) res -= pos[nx][ny]; ... 阅读全文

posted @ 2013-11-24 13:16 从此以后 阅读(231) 评论(0) 推荐(0)

HDU 1025 Constructing Roads In JGShining's Kingdom
摘要:wa了若干次,自己的问题,与题目没什么关系。输入的时候有很多问题,因为限制了左边的标号决定了右边的序号。思路:1.一开始按自己的动规思想做,越想越复杂。每次向前找符合的点,做不了2.仔细看看,其实是动态规划的最长子序列问题(LIS)。3.很多题解用了经典的二分搜索,手工写的,表示自己的理解不够火候,写不出,这种方法也与偏序集的思想有关4.《训练指南》有介绍了这个方法,下面代码采用了这种模板的方法。不好理解,详见代码 1 #include 2 #include 3 #include 4 using namespace std; 5 6 #define maxn 500010 7 #def... 阅读全文

posted @ 2013-11-23 23:59 从此以后 阅读(222) 评论(0) 推荐(0)

HDU 4177 Avoiding a disaster
摘要:三月份省赛选拔赛的题目,一直没有做。比赛的时候做不出来,当时可能没有想到用scanf,只用了string.h的方法做了很久,做不出来,样例没过,结果只做了三题,排第9.三月份的时候实在太渣了···总结:1.暴力求解最简单,可能代码稍长点。2.这题要考虑一些点:如果确定时间中心点。画一条时间轴可以看得很清楚 _________|__________|__________|____|___________________________ 0:005:0010:0012:00 对于样例1,正确的找正确钟点是0:00,5:00,10:00。明显,这种情况是不能直接找出他们 阅读全文

posted @ 2013-11-23 19:44 从此以后 阅读(356) 评论(0) 推荐(0)

Codeforce 362A Two Semiknights Meet
摘要:今天训练的题目,当时CFOJ挂了,没有显示结果,结果是WA了。做得很着急,用广搜做。其实题目还不是很明白的最后结束的时候看了一下别人博客的题解的意思,瞬间明白了题意:同时移动两个'K'点,问两个点最终能不能相遇。总结:1.没看清楚题目就做了,心态不稳定,太着急了。当时第一名交了这题,我的上一题才3A2.题目中的'#'好像是坑爹陷阱的,没什么用,看清楚题目最重要。3.细心点很快就找到规律。其实田字走法加上一个8*8的地域限制,绝对找到了可解决点。4.用广搜的方法做,过不了7个测试数据,当然我的求解的目的已经错了。5.只要两个点的横纵坐标的距离满足关系就可以知道了。 阅读全文

posted @ 2013-11-23 18:41 从此以后 阅读(294) 评论(0) 推荐(0)

HDU 1035 Robot Motion
摘要:codeforce挂掉了,做着题目跑过来写下题解。搜索题,典型的广搜。其实只是广搜的模型而已。回头看看这题,不是搜索,是模拟题,做题太快了,不考虑很多问题,直接干了。用到了队列记录,用map做记录标记已找过。方法很多如果接触过这类型的,应该很简单。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 map mp; 8 int maz[15][15]; 9 int n,m,st;10 void dir(int p,int s,int t,int &a,int &b)11 {12 if(p. 阅读全文

posted @ 2013-11-23 15:56 从此以后 阅读(225) 评论(0) 推荐(0)

HDU 1087 Super Jumping! Jumping! Jumping!
摘要:很简单的动态规划。题意:求一列最大的递增和。 1 #include 2 #define maxn 1010 3 4 int d[maxn] , l[maxn] , n; 5 6 int dp() 7 { 8 for(int i=1;i=1;j--){11 if(l[i] > l[j]){12 if(d[j]+l[i] > d[i]) d[i] = d[j]+l[i];13 }14 }15 }16 for(int i=n;i>=1;i--) if(d[i] > d[n])... 阅读全文

posted @ 2013-11-23 10:46 从此以后 阅读(191) 评论(0) 推荐(0)

HDU 1099 Lottery
摘要:题目有点难懂,直接看样例又不太直观。不管了。其实题意很简单,实际上就是一道数学题+编码题意:求一个数x的f(x)=x*(1/1+1/2+···+1/x),并按照有分数是输出其带分数的形式。注意格式输出。1.一开始做了溢出了,仔细看看才知道__int64貌似也不兼容22!的大小,一开始用数组记录22!的阶乘的方法不行。2.方法很多,这里采用的是模拟手工暴力运算,先将x乘进到括号里的分数,然后相加。相加的时候将分母扩大到最小公倍数,分子相应增大,以此类推 1 #include 2 #include 3 using namespace std; 4 #include 5 阅读全文

posted @ 2013-11-23 10:14 从此以后 阅读(281) 评论(0) 推荐(0)

HDU 1098 Ignatius's puzzle
摘要:这道题算是认真读了,算是以前没有仔细去研究一下不懂的符号,今天意淫出来的。呵呵题意就是满足公式f(x)=5·x^(13)+13·x^(5)+k·a·x的情况下,求一个最小的a,使得对于任何一个x都满足65|f(x)1.既然对整数x是任意满足的(除了0),那么取x=1就可以很快化简得公式(18+a·k)%65==02.有了上面的公式之外,可以进行暴力。3.如果直接暴力超时。可以注意到第66次和第1次是相同的,因为将公式化简后,出现了周期消去。此处不解释了 1 #include int main() 2 { 3 int k,ok,n; 4 whil 阅读全文

posted @ 2013-11-23 00:10 从此以后 阅读(183) 评论(0) 推荐(0)

HDU 1267 下沙的沙子有几粒?
摘要:一道很简答的题目,但是看不出来是DP啊。渣爆了。意思是从左到右H的数量要比D多,也就是当出现Hn的字符串都可以由m-1,n和m,n-1的字符串得到。3.只写出了转移方程,没有写出m 2 3 __int64 dp[21][21]; 4 int n , m; 5 6 void dfs() 7 { 8 for(int i=0;i<=20;i++) dp[0][i]=0; 9 for(int i=0;i<=20;i++) dp[i][0]=1;10 dp[0][0]=0;11 for(int i=1;i<=20;i++)12 {13 for(... 阅读全文

posted @ 2013-11-22 16:19 从此以后 阅读(239) 评论(0) 推荐(0)

HDU 1106 排序
摘要:一直注意这道题很久了。选拔赛之前就看见这道题一直做不出来。拖到现在终于做了。1.可以用很多C函数来解决很多问题,非常方便。写完这道题觉得自己写的函数才是王道。strchr(char*a,char ch)2.唯一一个要注意考虑的地方就是连续几个5 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int cal(string a) 9 {10 int ten=1 , res = 0;11 for(int i=a.length()-1;i>=0;i--)12... 阅读全文

posted @ 2013-11-22 13:23 从此以后 阅读(174) 评论(0) 推荐(0)

HDU 1208 Pascal's Travels
摘要:暑假集训的时候做过了,当时大神XX不到30分钟搞定了,我陷入了深搜的陷阱中了。题意:从[1,1]出发到[n,n],每次到达的格子都要按照格子里的数字走。问可以走到终点的数量是多少。1.明显的递推。每个可能走到的格子都是由上个格子转移来的,那么能到达上一个格子的步数肯定成为到达该格子的数量一部分。2.那么将每个格子可能去到的下一个格子都递推下去。只能向下向右走。3.递推的方法,或者记忆化搜索。 1 #include 2 #include 3 using namespace std; 4 5 __int64 path[40][40]; 6 int maz[40][40] , n; 7 8 ... 阅读全文

posted @ 2013-11-22 09:21 从此以后 阅读(403) 评论(0) 推荐(0)

HDU 1205 吃糖果
摘要:还是有点心急了。思路对了,发现如果有其中一种糖果是大于总数量的一半-1,那么将会无法形成隔板1.样例:[4,1,1] 就是对应这种情况---> |`|`| |,发现,如果当中出现一种类型,总数除去这部分剩下的部分要形成隔板才行,至少是sum-ele+1>=ele2.因此,对于每次输入的数,找出最大的数,并确定是否大于数量的一半-1即可。3.看了一些题解是属于抽屉原理。不太懂,学一下。 1 #include 2 3 __int64 num; 4 5 int main() 6 { 7 __int64 sum=0; 8 int T,n; 9 scanf("%d",&a 阅读全文

posted @ 2013-11-22 08:36 从此以后 阅读(237) 评论(0) 推荐(0)

HDU 1202 The calculation of GPA
摘要:以前和一个队员交流过的,当时他说他用了字符串表示的方法做的,想起来觉得有点麻烦今天做了一下,果然有点坑,也是看了题解才知道坑的地方1.如果总分太小了,也就小于1e-9那种,会导致OLE。2.分母不为0这个细心点都应该知道的。3.但是没有判断分母为0也AC了。 1 #include 2 #include 3 using namespace std; 4 #include 5 6 const double eps = 1e-9; 7 8 int get(double s) 9 {10 if(s >= 90 && s = 80) return 3;12 else if(s .. 阅读全文

posted @ 2013-11-22 07:56 从此以后 阅读(226) 评论(0) 推荐(0)

HDU 1201 18岁生日
摘要:才错了几分钟,好好看了一下,发现自己的限制条件写错了,思路是有的,但是有点混乱,积累经验了以0岁生日和18岁生日作为起点终点,很清楚看到中间的年份的天数是必须加上的,问题在于多出的一天是有0岁年还是18岁年来决定画几条线段就可以看见要判断的区间处于那一年了: 1.如果生日在2.29日之前,那么有误差的一年就在于这年,判断该年2.那么生日在2.29后,则误差不在今年,而是在最后一年。画图就可以将这个关系表达清楚了 3.以前用暴力做。用暴力只会复杂化,而且那时候是超时了。 1 #include 2 3 bool is_leap(int y){ 4 return ((y%4==0 && 阅读全文

posted @ 2013-11-21 23:51 从此以后 阅读(238) 评论(0) 推荐(0)

HDU 1200 To and Pro
摘要:水题一道,考得就是英语吧···不过最近才做出来,觉得自己平时太懒了。题意:给出一个字母矩形,给出已知列,将矩阵以列逐列向右读,输出字符串。思路:本来想做一个倒置矩阵。将相应行倒置。去年的时候接触这题大概是想用数学位置解决的,当时做不出来。 其实直接在已知字符串上做转置就行了,关键函数:reverse(p,p+n) 1 #include 2 #include 3 #include 4 using namespace std; 5 6 char ch[30][40]; 7 int cnt = 0 , n; 8 char str[300]; 9 10 void outp 阅读全文

posted @ 2013-11-21 22:33 从此以后 阅读(186) 评论(0) 推荐(0)

HDU 1113 Word Amalgamation
摘要:这题和刘汝佳的《入门经典》P79,十分相似,基本一样的吧刘汝佳用了qsort,C语言的内容,还不错。这里用C++,STL的方法1.如果用直接模拟的方法做,比较麻烦2.map的方法可以作为索引的方法,很快可以访问到相对的字符串3.索引的建造方法:每个字符串都排序,作为每个字符串的值,对应的键可以对应这个值,每次查找字典即可。 1 #include 2 #include 3 using namespace std; 4 #include 5 #include 6 #include 7 #include 8 9 multimap mp;10 multimap::iterator it;... 阅读全文

posted @ 2013-11-21 15:11 从此以后 阅读(264) 评论(0) 推荐(0)

暴力题,速算24点
摘要:题目总结:1.绝对暴力题。复杂度4*4*4*4*3*2*1*5远远达不到1000ms2.涉及到next_permutation(p,p+n)全排列方法解题过程的问题:1.一直超时,最后改了很多局部变量成全局变量,906ms水过,很险。2.之前wa了不下10次,思路有问题:排列数字和符号,按照符号的优先级进行计算,wa了,应该有括号3.要学会证明为什么上面的想法不对。例如,(a+b)*(c+d)=24是唯一解,若只按照优先级,永远只能计算a+(b*c)+d,那永远达不到终点。4.括号匹配情况有5中,列举一下就知道(a#b)#(c#d),((a#b)#c)#d,a#((b#c)#d),(a#(b# 阅读全文

posted @ 2013-11-21 14:26 从此以后 阅读(905) 评论(0) 推荐(0)