- 博客(65)
- 问答 (2)
- 收藏
- 关注
原创 FZU2216【二分】
题意:百度。思路:一个连续数组111222233344444555666的每一个起伏转折即需要一张万能牌。然后二分一下得最长区间。#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;const LL
2017-02-28 16:46:33 92
原创 FZU 2218【状压】
题意:给出长为n的字符串,含有前k种小写字母,求两个不含重复元素的连续子串,使得他们的长度乘积最大。思路:字符种类16 ->(套路) 状压暴力2000*2000得所有连续子串的长度,得每个状态的最优;dp使得包含字符个数最优。利用异或取反得最大值。#include#include#includeusing namespace std;const int N=1<
2017-02-28 16:41:40 343
原创 AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了。。。然后想想做完算了。。没想到C卡了一下,然后还是做出来了。D的话瞎想了一下,然后感觉也没问题。假装allkill.2333AtCoder Beginner Contest 052 A题意:输出大的面积?思路:max(A*B,C*D);AtCoder Beginner Contest 052 B题意:枚举过程
2017-02-27 21:23:52 610
原创 Mujin Programming Challenge 2017A - Robot Racing【思维题】
题意:给你n个人的位置,每个人能往后跳一格或两格到无人的位置,跳到0位置,这个人消失,n个人消失组成一个排列,问有多少种排列。思路:额,搞了一整场这个A...代码也巨挫了。处理成1,3,5,7,9.....的位置情况,当出现连续的时候,比如1,3,5,7,8的话那么后面的数怎么跳都不会在前面这些数之前跳出去,bingo!所以当前就可以说明这几个就可以在现在跳出去,比如1,3,5
2017-02-25 22:50:45 651
原创 51nod1069【Nim取石子游戏】
具体看:萌新笔记之Nim取石子游戏可以这么写:#include using namespace std;typedef long long LL;int bit[35];void solve(int n){ int num=0; while(n) { n%2==1?bit[num]++:bit[num]; n/=2;
2017-02-25 15:18:32 554
原创 Codeforces Round #401 (Div. 2)【A,B,C,D】
最近状态极差。。水题不想写,难题咬不动。。哎,CF的题那么简单,还搞崩了= =、真是巨菜无比。Codeforces777A题意:略。思路:构造出3!次变换,然后输出就好。Code:#include using namespace std;int a[6][4]={{1,2,3},{2,1,3},{2,3,1},{3,2,1},{3,1,2},{1,3,2}};i
2017-02-24 21:49:28 89
原创 HDU2874【LCA(模板)】
第一题LCA,代码参考自:Ice_Crazy思路:这个最短路算法是想都别想了,可以看出这幅图就是树嘛,那么对于查询就是求树上两个结点最短距离。这里就是利用LCA的tarjan离线算法。算法的大致流程:对于每一点u,① :建立以u为代表元素的集合。② :遍历与u相连的结点v,如果没有访问过,对与v使用Tarjan-LCA算法,结束后,将v的集合并入u的集合。
2017-02-24 15:44:58 1221 2
原创 ZOJ2898【折半搜索】
题意:给出一系列值和对应的陷阱,对于陷阱如果存在两个就抵消,求价值最大。思路:折半枚举,利用异或#include using namespace std;typedef long long LL;int v[30],k[30];int trap[30][60],n,ans;mapmp;map::iterator it;int main(){ while(~s
2017-02-23 18:07:01 377
原创 zoj2901【DP·二进制优化】
题意:要排一个L长度的序列,当 j 放在 i 后面的时候会增加v[ i ][ j ]的值,求构成L长度序列的最大值。思路:可以想到预处理任意两点的最大值是多少,然后题目还有个限制,就是长度,那么再加一维k,DP[k][i][j] 代表长度为k,i 到 j的最大价值。但是我们看到L很大,这样不行,那么就把长度表示成二进制,dp[0][i][j]为长度为1时,i到j的最大价值,
2017-02-23 15:15:54 580
原创 codeforces 547B【单调栈】
题意: 有一个长度为n的序列,序列有长度为1...n的连续子序列,一个连续子序列里面最小的值称作这个子序列的子序列的strength,要求出每种长度的连续子序列的最大的strength。思路:以当前位置为最小值,向两边延伸。那我就能知道这个位置作为最小值时长度。 具体思路忘了。。。给出几组数据希望能有启发?/*101 2 3 4 5 4 3 2 1 6
2017-02-20 23:23:20 432
原创 Codeforces631C【栈维护+瞎搞】
题意:百度。思路:如果该查询的R比前面的所有都大,那么前面所有都失效。那么我先预处理出这些有效的。 那最坏的情况不就是栈里面元素(R)很多 n,n-1,n-2,n-3,n-4而且都是相反排序的。。。 总不能每次都那样循环一下,跟着他变吧。所以找特性:如果有序列132456我的栈是1 62 51 32 2那么第一步从sort完:123456
2017-02-20 23:17:37 538
原创 HDU 1506【单调栈】
思路:转化成对于某一位置为最小值求向两边最远>=他的位置,用单调栈就能轻易完成。那么ans=(left+right)*h[i];维护单调递增还是递减呢?我们能很快反应到,一旦碰到一个比他小的元素,那么之前的那个比他大的就要结束了。ok,大致了解到碰到比他小的元素,那么比他大的呢?也简单呀,对于比他大的元素,左端点已经找到了呀!那么基于双方考虑,是不是就是维护单调递增栈呢?如果碰到比
2017-02-19 22:52:00 463
原创 HDU 3410【单调栈】
思路:单调栈。鄙人的记忆:按当前为最大值的两边延伸就是维护单调递减栈。//#include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long LL;typedef pair P
2017-02-19 22:49:42 483
原创 Codeforces617E【莫队算法+前缀异或】
题意:给出一系列数,对每个查询区间,计算有多少个子区间异或为k。思路:可以先预处理异或前缀,一个区间[L,R]的异或值=sum[R]^sum[L-1];如果当前区间是[a,b],加一个右端点b+1,那么这个b+1的贡献就是[a,b]区间内有多少个sum[x]=sum[b+1]^k那么我们可以每次记录num[sum[x]]即num[sum[b+1]^k],并记录num[sum[b
2017-02-19 19:49:43 1432
原创 Codeforces86D【莫队算法】
题意:给一个序列和一些区间,每次询问对区间所有不同的数,求每个不同的出现的个数的平方*其值的总和2*2*1+1*1*2思路:裸的莫队算法。补:1.cmp写错。2.LL运算不会进行转化。3.莫队的起始应该直接先处理好L,R。卡了将近2.5h,水题让自己很生气。以及不会查错误真的撒比!#include using namespace std;typedef
2017-02-18 10:20:46 551
原创 BZOJ2038【莫队算法】
THE FIRST 莫队算法。/************************************************************** Problem: 2038 User: keyboarder_zsq Language: C++ Result: Accepted Time:1644 ms Memory:2988 kb*
2017-02-17 21:29:12 398
原创 ZOJ3352【记忆化搜索】
先膜拜watashi!前言:比赛的时候,确定的是这是一个博弈,然后就是各种瞎猜,后面想到DP[ x ][ y ]代表x表白色的状态,y表黑色的状态,无果。挂机开始。GG、巨菜。思路:这一发记忆化搜索真是玄学。仔细想想,首先我只要求权值最大,我不在乎输赢。直接就是dp[i][j][k]代表当前白在 i 位置,黑在 j 位置,k为当前局势的赌资,dp存整个子结构包括本身的最大值
2017-02-17 20:27:36 305
原创 HDU2846【字典树】
题意:百度。思路:一个串的插入只能搞出这个串的前缀,然而对于要query的串是子串,所以插入的时候暴力插入所有字母开头的串。。。。然后还要注意到自己的串本身会叠加字典树中的前缀,要标记掉。#include using namespace std;typedef long long LL;typedef pair PII;const int N=2e6+10;int
2017-02-16 20:22:34 344
原创 CodeForces754D【贪心】
题意:有n个区间,每个区间覆盖区间里一段数,求最大连续区间长度被覆盖k次,并输出选取的区间。 思路:贪心;感觉一开始肯定是要把区间按left从小到大排序的。然后肯定是连续k个区间能够达到的重叠最长?因为left已经足够小了?3 21 10030 7031 78这个案例就说明这样贪心还不是准确的。 其实不管k多大,只有一个left,一个right,le
2017-02-15 12:24:37 349
原创 POJ1111【BFS】
在搜1011的时候误搜了1111,简单BFS吧,多一个X就是多四个面,每次看看他的四个面有多少个重复的,然后剪掉,最后答案加上就好了;code://#include #include#include#include#include#include#includeusing namespace std;typedef long long LL;typedef pair PI
2017-02-14 22:14:17 350
原创 玲珑OJ1088【蜜汁尺取】
前言(膜法):早上10点多开始膜的,然后到中午交了一发,感觉膜法不对啊!然后就兴起小窗了一发管理员,然后管理员给我发了in,out数据。。。可是太大并没有什么可取性。。。还是自己试,然后发现自己搞的案例都过,后面放着不玩了,然后队友给了我一题以前做过的dfs写,然后写了以后T了,后面我就跟他讲这道题。。。讲完好我说我的方法,他硬是不懂我的尺取,然后搞了一个破案例我模拟发现,卧槽我左指针
2017-02-14 21:40:56 448
原创 POJ1011【判重剪枝】
题意:给你一堆棒子,这些棒子是你从一堆一样的棒子折断而来的,现在你忘记了是从那一堆一样的棒子的长度,让你写一个程序,求最短的长度。思路:首先这个棒长肯定是和的约数,且大于最大值。然后是sort一下棒子长度从大到小(我也不知道为啥可行)最后就是一个判重剪枝:注意判重剪枝,是对相同情况的剪枝,这个相同情况就是要非常相同!这里代码那个!vis[i]很有体会啊;//#i
2017-02-14 21:25:28 406
原创 Codeforces Round #269 (Div. 2) A,B,C,D
CodeForces - 471A首先要有四个数相等,然后剩下两个数不同就是Bear,否则就是Elephant。#include using namespace std;typedef pair PII;int num[10];int a;int main(){ memset(num,0,sizeof(num)); for(int i=1;i<=6;i+
2017-02-12 22:30:15 359
原创 HDU3065【AC自动机-AC感言】
Fourth AC zi dong ji(Aho-Corasick Automation) of life9A(其实不止交了10发...) 感言:一开始多组数据这种小数据还是...无伤大局,因为改完以后还是wa...一:最后发现是wa在构造fail指针的时候在建立临时指针查询有没有匹配到的fail,在没有匹配到的时候,结点的fail的指针要指向根。二(重要感言):在
2017-02-12 09:52:19 345
原创 HDU5880【AC自动机】
题意:给出n个字符串,再给出一个字符串,把之前出现过的字符串全部变成*思路:AC自动机,Trie树上存的值是一个字符串的长度,也就是往前的长度,然后倒着处理一遍。感想:第三题AC自动机,本来就是想脱离模板多练练,虽然之前撒比bug错了一大堆,但是收获很多啊。重要的感想有两个方面:一:在我们solve主串的时候:在通过移动失败指针处理后缀串的时候,在这道题里只
2017-02-11 21:18:05 660
原创 HDU2896【AC自动机-模板】
思路:因为不同病毒特征码不会相同。AC自动机,然后对于每一个输出即可。 注意:以上字符串中字符都是ASCII码可见字符(不包括回车);G++ MLE。 //#include #include#include#include#include#include using namespace std;const int N=1e5+10; /
2017-02-11 16:13:21 893
原创 HDU2222【AC自动机(基础·模板)】
Frist AC zi dong ji(Aho-Corasick Automation) of life#include using namespace std;const int N=5e5+10; //10000个串,长度为50 struct Trie{ int num; Trie *next[27],*fail;};Trie q[
2017-02-11 14:44:13 387
空空如也
解高次方程,除二分法
2016-01-22
C语言memset函数赋0问题
2015-11-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人