随笔分类 -  codeforce

摘要:8A用string.find即可,我比较sb的以为string.rfind()和reversestring.find()是一样的,怎么都过不去,被打击透了。8B开始想的太简单,以为就判断终点是否在中途访问过即可。lur这种情况明显不符合,然后改成bfs,好久没写竟然忘记标记以访问过,搞的mle咯,想了半天才记起来这点...8C 弱鸡又见dp,无从下手,看了看别人的代码,都说是状态dp,然后拿东西顺序无关,这得好好理解下咯。照例贴大牛代码琢磨...#include#includeusing namespace std;int main(){ string ostr,str1,str2; ... 阅读全文
posted @ 2014-03-01 11:19 cavehubiao 阅读(394) 评论(0) 推荐(0)
摘要:两题都没做出来,6D的dp到现在我还是有点没理解,先留着吧。6E看到最后才弄懂题意,就是找出最长连续子串长度和数量。网上看到说用线段树(segment-tree),从来没见过的数据结构,表示查了好久http://dongxicheng.org/structure/segment-tree/可以参看这篇文章看看,虽说看了好像对线段树有点认识了,但是放在这题我还是没什么思路。后来去cf上看了看前几名提交的代码,不禁佩服实在是太精炼了。贴个吧。#include#includeint a[100100],c[100100],n,k,b,m,p;std::multiset s;int main(){ . 阅读全文
posted @ 2013-12-07 21:15 cavehubiao 阅读(211) 评论(0) 推荐(0)
摘要:很经典的题目,我没做出来,参照这例程写的,这题真的好好琢磨一下了#includeusing namespace std;int main(){ int n; cin>>n; int*l=new int[n+1](); int*r=new int[n+1](); int*c=new int[n+1](); int*td=new int[n+1]; int*d=new int[n+1]; int maxh=0,maxi; for(int i=0;i>td[i]; if(td[i]>maxh) { ... 阅读全文
posted @ 2013-11-28 15:44 cavehubiao 阅读(314) 评论(0) 推荐(0)
摘要:5A,5B直接实现,没有什么难度,主要是要读懂题,例如5B...5C dp可惜我又没想出来,好伤感...菜鸡的春天在哪里啊...看了下官方的tutorial,讲的很清楚,两个数组d[n],c[n]d[i],记录i位置‘)’对应的‘(’位置,当然前提是要第i个是‘(’,如果不存在则d[i]=-1;c[i],记录以i处的‘)’为结尾的最长子串的第一个‘(’的位置,如果不存在则-1;具体实现要维护一个栈,从0开始,如果是‘(,入栈所在位置;如果是')',使得c[i]=d[i]=stack.top();如果stack为空c[i]=d[i]=-1;同时,判断d[i]-1处是不是' 阅读全文
posted @ 2013-11-27 22:38 cavehubiao 阅读(266) 评论(0) 推荐(0)
摘要:4A简直逗..4B很简单的贪心,首先判断一下min的和是否大于sum或者max的和是否小于sum,如果是则不可能否则,首先先取每天已学习min的时间,最后一个个加到max,等于sum时退出。4C我nc,看到就以为要用字符串hash,照着写个BKDRHash,最后添加尾部的数字搞了半天,到了10000个字符串时就是过不去,想了下hash取模不能保证一定无冲突.后来看人题解map int记录次数...简直太简单了..4D dp,绕了好久,后来想通,首先把不可能装礼物的盒子去掉再dp,这里要注意下,严格满足w1>w2&&h1>h2的,要保证1在2后面,不然dp会有问题./ 阅读全文
posted @ 2013-11-19 23:52 cavehubiao 阅读(303) 评论(0) 推荐(0)
摘要:3C看起来简单,还是wa的好多次,许多细节没有考虑到。。。3D没有思路,看了下大牛的解法,感觉比较清楚,写了出来后,最后判断-1时又卡住了,回去看了看大牛,如果leftcnt!=rightcnt及为不可能匹配#include#includeusing namespace std;int cntx=0,cnt0=0,cntdot=0;int aryx[10][2],ary0[10][2];char chess[3][3];int Win(char);int main(){ for(int i=0;i>chess[i][j]; if(chess[i][j]=='X') ... 阅读全文
posted @ 2013-11-17 15:37 cavehubiao 阅读(220) 评论(0) 推荐(0)
摘要:3A要求到最短路径,直接算就完了,很简单3B确实能用01背包问题解决,不过数据太多,dp表可能mle,题目给的分类是greedy贪心,于是考虑了下:由于只有两种体积的船,1与2,所以根据value/体积,进行排序根据贪心选择有限选择平均价值较高的,这里用两个数组ary1,ary2分别记录1和2的价值,维护两个指针分别指向ary1,ary2最大,比较,较大的选入,如果不能够正常选完,说明肯定是最后总体积只剩1,而当前贪心选择最优是体积2的船,于是在判断是否还剩体积1的船未选,如果有那么查找已选如的体积1的船中的最小价值+剩余体积1的船最大价值 是否大于当前最优体积2的船,如果是,选择1,如果不是 阅读全文
posted @ 2013-11-13 22:11 cavehubiao 阅读(235) 评论(0) 推荐(0)
摘要:2A直接写,最多用个字符串hash,#include#include#includeusing namespace std;struct PI{ int point; int lastRound; int maxpoint;};PI record[99991];unsigned int ELFHash(char* str){ unsigned int hash=0; unsigned int x=0; while(*str) { hash=(hash>24); hash&=~x; } } r... 阅读全文
posted @ 2013-11-09 15:28 cavehubiao 阅读(245) 评论(0) 推荐(0)
摘要:1A,1B比较容易,直接贴代码了,1C关于计算几何的一点知识,要比较清楚几个公式,我全给忘了,参照了写大牛的代码过了,比较值得注意的是那个fgcd,求浮点型的最大公约数,最好设一个全局的esp=1e-4,即0.0001当feq(a,0)或feq(b,0)即差小于esp则视为相等。1B 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 int main() 8 { 9 int n;10 string str;11 cin>>n;12 for(int i=0;i>str;1... 阅读全文
posted @ 2013-11-06 18:04 cavehubiao 阅读(308) 评论(0) 推荐(0)