- 博客(23)
- 收藏
- 关注
原创 hdu 4737
奉献一个线段树nlogn的做法= =网上各种暴力太不靠谱了= =那个30*n的感觉还是不够好。。。。按照暴力的思路 我们要找每一个i最右能到的位置ed然后我们可以一个个的更新 利用x|0 = x初始化每个点都是0每一次到i这个位置的时候把i-1更新为0,然后一直往右添加点ed直到异或>=m为止到下一个点的时候接着这个ed往右更新就行了//#p
2013-09-14 22:34:39
622
原创 HDU 4689
出题人满满的恶意伤不起啊。。。。一眼过去谁都以为状压dp= = 各种T就不说了。。赛后想想这尼玛N^2水dp啊。。。dp[now][left]表示到now,前面还有left个+号没有填。。然后转移的时候这样考虑 如果当前s[now]=='+' 有2种选择, 我可以用当前的now去把now之前的某个+号填上(这样就有C(left,1)个+号给我选,然后到n
2013-08-21 11:24:07
1079
原创 hdu 4616 Game
树形dp 很容易想到的一种dp状态是dp[i][trap][fa]表示当前结点为i,经过trap个陷阱,从fa那里转移过来的最优解,虽然空间理论上只有O(n),但是要写成代码就得用vector或者map什么的。。。 明显的感觉要挂。。 (我赛后用map写500ms过了。。。数据弱么。。)多校的时候想到了这种状态。。但是没敢写T_T 4618那题也是这样 唉 太坑了T_T 以后不管怎样先写了再
2013-07-27 21:50:30
983
原创 UVA 10829 L-gap substrings
求字符串中满足UVU形式子串个数,其中V的长度固定为gap,U不能为空 首先枚举U的长度l,然后类似于poj3693那题的方法,将原串分为n/l组; 比如 bbaabaaaaa l = 2时,分成 bb | aa | ba | aa| aa 然后显然有个性质——左边的那个U必然要包含且只包含一个端点(其实右边也一样,但是
2013-07-12 12:07:37
1999
原创 后缀数组训练计划
暑期集训开始了= = 挖个坑 看能不能填完。。。1. hdu 1403/pku 2774 没什么好说的。。。把2个字符串拼起来,中间用个不会出现的字符隔开,注意选答案的时候要保证2个height是来自于不同的串 #include #include #include #include #include #include #include #inc
2013-07-09 00:26:19
639
原创 hdu 4570
当时现场赛看不懂。。。 最近几天偶然又看到这题了。。。边查字典边看发现就是一道水题。。。dp[i] 表示从第i个level往后扩展所需要的最少table数,然后转移是dp[i] = min(dp[i],dp[j]+s[i]*2^(j-i)); j = i+1,i+2,i+3.....,i+20#include #include #include using nam
2013-06-11 23:20:40
1429
原创 hdu 4552
ac自动机模版题#include #include #include #include using namespace std;#define LETTER 26#define MAXNODE 500005char key[51],s[100001];int n,cnt = 0,root;struct node{ int count; int
2013-05-18 23:11:49
643
原创 hdu 4549 M斐波那契数列
f(n)表示斐波那契数列的第n项F(n) = a^f(n-1)*b^f(n) 这个推一下就知道了然后f(n)可以用矩阵快速幂求1 1 f(n+1) f(n)1 0 的n次幂 = f(n) f(n-1) 就行了(至于为什么有这个自己度娘把。。) 但关键点在于f(n)可能很大 a^f(n-
2013-05-18 20:40:34
511
原创 hdu 4546
思路是优先队列先排序,然后Item类记录sum是当前难度的和,next是下一个要取的题目初始化推入0,0然后循环m次,每次取出sum+a[next],然后再推入2个,要么取next,要么不取这个,去取它的下一个具体的看代码#include #include #include #include #include #include #include #
2013-05-17 23:00:55
722
原创 hdu 4533
思路就是把被子拆成4个点,如果某个点(x,y)在(0,0)-(t,t)内的话,如果这个点是左下角或者右上角 面积就+=(t-x)*(t-y),反之面积-=(t-x)*(t-y);(画个图就知道了)而(t-x)*(t-y) = t*t-(x+y)*t+x*y所以,需要维护3个系数1,-(x+y),x*y;在代码中体现#include #include #include #include
2013-03-31 01:03:29
701
原创 hdu 4517
#include #include #include using namespace std;char map[2002][2002];int cnt[2002][2002];//我的map下标从1,1开始//cnt保存从左上角(0,0)到(i,j) 的*的个数int n,m;int main(void){// freopen("","r",stdin); whi
2013-03-24 10:13:30
573
原创 百度之星3.23 第一题
直接二分答案 然后判断是否符合要求 复杂度n*(log(n*1000))#include #include #include #include using namespace std;int ti[10001];int n,k;int main(void){// freopen("","r",stdin); while(scanf("%d %d",&n,
2013-03-23 23:10:30
482
原创 dp专题练习
开学了~ 开始专题训练 就从dp开始吧 这篇日志会一直更新的多重背包poj 1014/hdu 1059 Dividing http://blog.youkuaiyun.com/xing89qs/article/details/8618166
2013-02-27 16:04:37
316
原创 poj 1014 Dividing
多重背包即可设dp[j] 表示是否可能分出价值为j的石头最后判断dp[total/2]是否为真即可贴代码#include #include #include using namespace std;int num[7];bool dp[120001];int main(void){ //freopen("","r",stdin); int t = 1;
2013-02-27 16:04:07
332
原创 TC SRM 571 div2
弱菜还在努力冲向div1中T_T,今天研究了好久1000pt 终于PASS SYSTEM TEST了。。。 过来写写解题报告250pt直接统计字符o的个数就好了500pt昨晚做的时候发现n最大只有1000于是直接暴力全部加进去,再排序水过。。。今天研究了一下 优化了点 前k位必定是1 - k, 10 - 10+k, 100 - 100+k, 1000 - 100
2013-02-20 19:11:50
390
原创 hdu 2588
http://acm.hdu.edu.cn/showproblem.php?pid=2588又一道欧拉函数题,题目要求小于等于n且与n的最大公约数大于等于m的所有数的个数欧拉函数只能求出小于n且与n互质的所有数的个数,但是无法求出最大公约数是否大于m但是 我们可以这样想 设a为大于等于m的n的一个约数,那么euler(n/a)表示的就是所有小于a与a互质的数的个数,设任一个数为
2013-02-11 14:07:25
820
原创 hdu 3501
题目要求小于n且不与n互质的所有数的和,很明显的欧拉函数 但问题是欧拉函数只能求出满足小于n且与n互质的数个数 我们可以这样看设 a1,a2,a3,...,ak(k = euler(n))为所有满足小于n且与n互质的互不相同的数那么 gcd(n,ai) = 1则gcd(n,n-ai) = 1那么n-a1,n-a2,n-a3...n-ak也是所有满足小于n且与n互质的数(唯一性很容易
2013-02-11 00:58:43
432
原创 ZOJ 3665
发份AC代码 仅供参考 运行时间390MS 不是最高的 看到有大神20ms 只能膜拜T_T 其实实质是等比数列的和固定 然后求公比k和项数r的所有情况啦#include #include #include using namespace std;int main(void){ long long int n,r,k,min,sqr
2013-02-04 00:46:54
377
原创 HDU 3463
题目就不废话了 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3463首先我们肯定都能想到去打表然后我们从3-20000打出2261个素数 对于偶数而言 O(2261*2261)的枚举还是可以接受的 但是对于奇数而言O(2261*2261*2261)就显然要超时了所以我们换种思路 因为偶数由2个素数构成 而奇
2013-02-04 00:45:03
472
原创 HDU 2196 树形dp
首先不得不说这题真的很不错 花了我一整天的时间来想= =题目要求大概就是给你一棵树,求每一个节点到达的其他点所经过边的权值的最大值开始还想用FLOYD 但是看到10000个结点= =顿时打消了念头后来想到应该树形dp 对于一个结点,他能取得的最大值有2种可能,1是从他的子树走,2是从父节点走所以用far数组表示一个节点从他的子树走所能到达
2013-02-04 00:43:56
361
原创 hdu 2389
这题明显的二分匹配 第一次用匈牙利算法居然TLE。。。。然后改用HK A了 156ms~图用的邻接表存的,没用vector,可能快点吧。。#include #include #include #include using namespace std;int n,m,head[3001],speed[3001],next[9000001],e[9000
2013-02-04 00:36:49
645
原创 Java自己做按钮~
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;//需要准备3张图
2012-03-24 15:28:37
684
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人