2011年9月7日
摘要: HDU_4020思路还是比较好想的,进行排序再统计即可,但是不同的处理方式之间存在着时间的差距。我后来选择的方式是,先将所有数据的标号r[i]依点击次数进行排序,然后初始化一个数组hash[]=0,hash[i]表示依次遍历时customeri出现的次数,用一个数组ans[i]来记录每个customer点击率排行第i的广告的总的长度,即在遍历的时候令ans[++hash[r[i]]]+=click[r[i]]即可。最后再用一个数组res[i]来表示每个customer点击率在第i位及之前的所有广告的总长度。#include<stdio.h>#include<string.h& 阅读全文
posted @ 2011-09-07 23:20 Staginner 阅读(314) 评论(2) 推荐(1) 编辑
摘要: HDU_4001 这个是一个相对容易的动态规划题,由于每次activity的时候M一定是在上海的,因而要达到这个状态,要么从前一次activity结束一直到现在M一直在上海,要么在上一次activity结束之后M飞回了北京,并在这次activity开始前一天飞到了上海(这种情况的前提是两次activity之间的间隔时间大于或等于2天),在两种情况中取一个花费最小的情况即可。#include<stdio.h>#include<string.h>int n,a,b,d[100010];double cost[1000010];int main(){ int i,j,k,t; 阅读全文
posted @ 2011-09-07 22:43 Staginner 阅读(259) 评论(0) 推荐(0) 编辑
摘要: UVA_208这个题目思路很简单,但关键在于对深搜的优化(也即剪枝)。同时,这个题目好像没说最后要按字典序输出方案,但确实只有按字典序输出方案才能AC。(如果你看到了题目中有这点要求,千万别用鸡蛋砸我,我英文不好……)一开始我用邻接矩阵写,超时了,后来改成了邻接表还是超时。看了别人的报告后,说是一开始先把到达起火点的所有点找出来,然后再从这些点中挑DFS时用到的点。这样写完之后果然AC了,而且时间还很快,反思了一下,可能是测试数据中存在起点与终点不连通的数据,而与起点相连的又恰好是一个稠密图,反向搜索可达点、正项搜索路径恰好解决了这个问题。其实在找能到达起火点的点时,也可以用并查集,个人感觉并 阅读全文
posted @ 2011-09-07 22:34 Staginner 阅读(1038) 评论(0) 推荐(1) 编辑
摘要: UVA_193这个题目的题意并不难理解,但由于这个题目节点数最多可到100个,如果是直接依次枚举每个点并判断这个点时候可以涂成黑色的话是会超时的。仔细想了一下,实际上如果一个点涂成黑色的话,那么和它相邻的所有点都必须涂成白色,这样如果我们每涂一个黑色的点,实际上剩下的可以涂成黑色的点就很明显了,只要是没有涂过色的都可以。只要按这样的规则不停地枚举可以涂成黑色的点并将其涂成黑色就可以了,当被涂色的点的数量达到n时,就可以数涂成黑色的点的数量了,或者可以直接把黑色的点的数量当做深搜函数的一个参数,这样最后就不用再数一遍了。想到上面的思路后,深搜的函数就比较好写了。#include<stdio 阅读全文
posted @ 2011-09-07 12:16 Staginner 阅读(725) 评论(2) 推荐(0) 编辑
摘要: UVA_10001由于这个题目主要是理解题意的问题,所以就多用些文字放在解释题意上面吧。这个题目大致的意思是这样的,一共有这样256个自动机,它们可以依据一个字符串当前的状态,并将其按某种法则转化成一个新的字符串,题目的要求是对于给出的指定型号的自动机以及一个字符串,然后去判断是否存在一个这样的字符串,经过Input中的自动机的转化能够变成Input中的字符串。那么自动机的型号是怎么确定的呢?对于一台给定的自动机,它的转化字符串的法则又是怎样的呢?我们把题目中的图解释清楚,这两个问题自然就迎刃而解了。题目中的图是这个样子的:其中左边3列描述的是原字符串当前格子(Cell)以及左右两边的格子的状 阅读全文
posted @ 2011-09-07 00:53 Staginner 阅读(1342) 评论(5) 推荐(1) 编辑