摘要:
这两天都没怎么在状态,,希望做过这道题之后又能重新找到激情。。。^_^感觉题目出的不错,,很现实的东西。。题目大意:模拟手机输入法。。。字典树+深搜。。刚开始以为只在一个串上呢。。举个例子来说明。。3ac4ab3bp 5271如果按原来的想法会输出:aMANUALLY但是后来一想,这明显的不符合手机上显示的。。再想想感觉需要把所有的状态遍历一遍,,那就用深搜吧。。在搜最长的同时,那所有的都记录下来,,对于一行输入只需要搜一遍。。代码:# include<stdio.h># include<string.h># include<stdlib.h># defin 阅读全文
摘要:
这两天看了下字典树,,其实应该去年就学了的,不过去年集训时 把这个给忽略了。。思想很简单,也很容易理解:根节点不包含字符,除根节点外每一个节点都只包含一个字符。从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符都不相同。这个就像别人说的那样,是典型的以空间换时间,,所以写程序的时候要注意,,每次用完了要delete掉,否则会MLE的。。这三道题目都比较简单,,就是简单的套模板就可以了,,但是对于1247的方法不很满意,感觉先插入,然后再对每一个单词,一位一位的查,很浪费时间,不过竟然没有超时,感觉数据有点弱。。。寻找一种更好的方法。。1671这个 阅读全文
摘要:
好几天都没写博客了。。这几天一直都在看关于矩形面积的并,交和周长,到现在也稍微理解了一点。。用的都是线段树+扫描线,,共同点都是需要用到离散化,对y坐标进行从小到大排序,除去相等的y点,根据y轴进行建树。。然后扫描线需要记录是矩形的左边界还是右边界。。。每一个结点的c表示该线段被覆盖的次数,具体看代码:矩形面积的并:# include<stdio.h># include<stdlib.h># define N 210struct node{ double x,y1,y2; int f;}Line[N];struct node1{ double lf,rf,cnt; in 阅读全文
摘要:
很不错的一道线段树题目,做了两天,终于给弄明白了。。。看别人blog的时候,发现总是说离散化,,不明白什么意思。。。上网搜了下,其实就是一种思想的转化,,有时候我们一直在用,只不过不知道叫什么名字罢了。。。比如对于这道题, 我们如果讨论一个数,判断它前面是否出现过,,因为0 ≤ Ai ≤ 1,000,000,000 ,很显然我们不能直接 用一个visit去判断。。但是由于1 ≤ N ≤ 30,000 ,我们可以开一个30000的数组,然后把这些数存起来,排好序, 之后再判断一个数是否出现过的时候, 就可以用二分找到它的下标。。对下表进行visit记录就可以了。。。题意:给出一个长度为N(N&l 阅读全文
摘要:
强连通+反向图,刚开始没想那么多,就按原来强连通的方法写,写到最后不知道该怎样写了,因为如果不进行特殊处理的话,每次搜in_deree[i]==0的点,然后把以它为尾的 有向边的 头结点的in_deree--;但是感觉这样写出来会超时, 就没再接着写,上网搜了下, 发现需要一个反向图。。自己又在纸上一划,感觉有思路了,,就给写出来了。。。求出来强连通分量之后,把每一个强连通分量看成一个点,然后它有一个val值,表示它包含的点的个数。。建立反向图, support最高的必定 存在于 入度为 0 的点之中。。然后根据入度为0的一直深搜下去,找去最大的support就ok了。。。代码:View Co 阅读全文
摘要:
强连通。。只需要最后记录每一个强连通分支的入度的最小值(其中有入度为0的,这样的不用考虑),把这些这些最小值加起来就是了。。代码:View Code 1 # include<stdio.h> 2 # define N 50005 3 # define M 100005 4 # define PI 0xfffffff 5 struct node{ 6 int from,to,next,data; 7 }edge1[M],edge2[M]; 8 int visit1[N],visit2[N], 9 head1[N],head2[N];10 int T[N],Belong[N],val[ 阅读全文
摘要:
这两题都是强连通。。上午刚开过,下午放学后就趁热打铁,把这两道题也给解决了。。。只要把kosaraju的意思理解了,用起来会很顺手的,,对于这一类的题目只需要稍微改下就可以了。。对于1269题,很明显强连通,,只需要判断Bcnt就行了,判断有多少了强连通分支。。。1827题,Wiskey只需要和 入度为0的强连通分支打电话。。。对于这样的强连通分支找到打电话所耗的费用最少的一个,,可以在第二个dfs里面处理一下就行了,记录耗用电话费最少的。。。1269题就不贴代码了,,1827代码:View Code 1 # include<stdio.h> 2 # include<stri 阅读全文
摘要:
强连通。。。前两天比赛的题目, 当时不理解清题目, 以为是一个无向图,然后找环。。怎么搞都搞不出来。。。今天上午看了一下强连通,,学习了Kosaraju这个算法。。题目大意是给你一个有向图,问你至少加几条边让整个图变成强连通,,强连通图的意思是图里面任意两个顶点都能够到达,,解法:缩点后统计没有出度的和没有入度的点个个数,两者取最大值代码:View Code 1 # include<stdio.h> 2 # include<string.h> 3 # define PI 50005 4 # define M 20005 5 struct node{ 6 int from 阅读全文
摘要:
在zoj上做了两周的题,总的来说不怎么的。。总共做了10道题目,其中大多都是简单的, 不过也有两道稍微难一点的。。。不管怎样吧,这两周也没少努力,以后还是要继续坚持,争取在acm这条道路上走的更远。。。。今天好有挫败感, 前两天为大一今天的选拔赛出了两道题目,,没想到两道题目的数据都有毛病,,一道是错的,另一道虽然改好了,不过到最后也没有人提交过,。感觉好失败啊。。好对不起 大一的童鞋们。。。 阅读全文
摘要:
今天下午做了一下午的大整数。。。都不是很难,只要找到了归规律,处理好大整数就可以AC了---1130 递推公式为f[i]=0;for(j=0;j<=i-1;j++){ f[i]+=f[j]*f[i-j-1];}用大整数转化一下就可以了。。1133:m个人拿50,n个人拿100 , 所以如果 n>m,那么排序方法数为 0 这一点很容易想清楚 现在我们假设 拿50的人用 ‘0’表示, 拿100的人用 1 表示。 如果有这么一个序列 0101101001001111.......... 当第K个位置出现1的个数多余0的个数时就是一个不合法序列了 假设m=4 n=3的一个序列是:01101 阅读全文