大学ACM记忆
文章平均质量分 57
lentty
这个作者很懒,什么都没留下…
展开
-
HDU 1053 哈弗曼编码
贡献了10多次WA。。终于找到错误了!!!全局定义了a 数组,又在局部定义了啊!!!伤不起啊!!有木有啊!!找了一个上午的错啊!! #include#include#include#include#include#include#include#include#include#include#define inf 0x7fffffff#define maxn 10原创 2012-10-04 12:03:29 · 522 阅读 · 0 评论 -
中国余数定理
中国余数定理 先学扩展欧几里得吧>,看这篇http://www.cnblogs.com/walker01/archive/2010/01/23/1654880.html模数互质的情况FZU 1402//模数互质的情况#include#include#define ll __int64ll div[15],rem[15];ll n,d,x,y;void原创 2013-01-25 23:16:22 · 777 阅读 · 0 评论 -
HDU 1252 广搜
这道题主要是要看懂这句话the piece may only be moved along arrows of the same colour as the arrow between the two opponents' pieces意思是说 有3个小块 小块1想移动到小块2 去的条件是 1->2中路线的颜色和23的颜色相同 理解了就好做了 普通的广搜,单步调试得我很郁闷,坑爹啊原创 2012-09-02 22:28:15 · 1199 阅读 · 0 评论 -
HDU 3400 两次三分
这道题卡了我好久,一直不能证明他们的距离为什么是先递减后递增,所以也不能想到三分 网上也没有给出证明,尝试用三分写了下,注意是三分的E,F点在AB CD点上的占的比例,这样代码比较简单好看 #include#include#include#define eps 1e-8struct point{ double x,y;};point a,b,c,d;原创 2012-08-28 15:32:19 · 442 阅读 · 0 评论 -
HDU 3496 二维背包
根据背包9讲:费用加了一维,只需状态也加一维即可。设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值。状态转移方程就是:f[i][v][u]=max{f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+w[i]}如前述方法,可以只使用二维的数组:当每件物品只可以取一次时变量v和u采用逆序的循环,当物品有如完全背包问题时采用顺序的循环。原创 2012-08-22 13:46:36 · 455 阅读 · 0 评论 -
SOJ 1689 算阶乘
import java.math.*;import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); int t=cin.nextInt(); whi原创 2012-07-29 10:16:01 · 335 阅读 · 0 评论 -
SOJ 2433 最长递增子序列
求最长递增子序列方法很多,目前最快的NLOGN,二分做法 普通做法 200MS #include int main (){ int i,n,m; scanf("%d",&m); while(m--) { int a[2002],b[2002],j,max=0; scanf("%d",&n); for(i=原创 2012-07-24 21:59:13 · 676 阅读 · 0 评论 -
POJ 1185 HDU 4539 状态压缩DP
这两个题非常相似 画图出来的效果是;POJ 1185HDU 4539dp[i][j][k] 表示第i行状态为j 第i-1行状态为k 转移方程为: dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][l]+cnt[j])确定本行放置是否合法 : 图1 X&(X 图2 只需判断 X&(x判断3行原创 2013-04-02 22:13:15 · 797 阅读 · 3 评论 -
HDU 2412 树状DP
求最多人数直接树状DP就好了 跟HDU 1520类似这题关键是求解是否唯一。。看了某个PPT后了解到:新加一个状态dup[i][j],表示相应的dp[i][j]是否是唯一方案。对于叶子结点, dup[k][0] = dup[k][1] = 1.对于非叶子结点,对于i的任一儿子j,若(dp[j][0] > dp[j][1] 且 dup[j][0] == 0原创 2013-03-25 12:21:36 · 598 阅读 · 0 评论 -
HDU 1520 Anniversary party树状DP
最简单的树状DP了。。这题的特殊性可以建成无向图,以任意节点为根节点。。#include#include#include#include#include#includeusing namespace std;#define maxn 6010int val[maxn];int dp[maxn][2];bool vis[maxn];vector vec[maxn原创 2013-03-25 00:31:32 · 586 阅读 · 0 评论 -
HDU 1561 树形DP+有依赖的背包
此题的依赖关系为选子节点必须选其根节点可以转换成分组背包,子节点和根在一个分组内,具体参见 背包九讲也可见:http://www.cnblogs.com/gentleh/archive/2013/03/19/2969890.html代码有注释#include#include#includeusing namespace std;#define maxn 22原创 2013-03-27 15:53:07 · 640 阅读 · 0 评论 -
2013-6-2 第五届四川省省赛总结
今天都6.5号了,昨天去阿里面了试,今天才有时间写这篇文章,其实一直不知道该如何开头,要怎样写下去,至此我的ACM生涯已经结束了,有一种解脱的感觉,内心不再有一种沉沉的负担,也不知道是什么时候开始,我为ACM变得神经衰弱,不过现在这一切都结束了。加入ACM集训队的时候是大一下的五一节前后,跟着室友去面试了,但是也没有想要过,不过稀里糊涂就过了,然后就是暑假集训,集训说实话我都不知道干了原创 2013-06-05 14:41:58 · 1409 阅读 · 5 评论 -
hdu 1829 并查集
这道题是并查集的一个应用分析清题意后并不是很难 在一堆虫子和一些关系中找出是否存在同性恋的虫子= = ! 定义一个数组op[] ,op[x]=y,表示x,y是不同性别,也就是在不同的集合初始化op[i]=0;输入一对数,找到他们的集合代表元素,如果相等,则证明它们在同一个集合,则找到了同性恋虫子,flag=1;如果不等,那么如果此时op[x]=0,op[y]=0,2原创 2012-09-13 21:01:50 · 399 阅读 · 0 评论 -
HDU 1671 字典树
还是字典树,注意要释放内存 #include#include#includestruct dictree{ struct dictree*child[10]; int n;};struct dictree *root;void build(char *src){ int i,j; int len=strlen(src); struc原创 2012-07-28 23:55:36 · 353 阅读 · 0 评论 -
SOJ 4164 贪心
这题也是看你怎么排序了。。 要按2个距离之差的绝对值从大到小排序 #include#include#include#includeusing namespace std;struct node{ int num; int da; int db;}ba[1010];int cmp(const node&x,const node&y){ r原创 2012-07-25 21:54:11 · 425 阅读 · 0 评论 -
HDU 1114 完全背包
完全背包与01背包不同的是 物品的数量不限制 代码与01背包非常类似 #include#includeint dp[10010];struct coin{ int value; int weight;}a[510];int main(){ int t; scanf("%d",&t); while(t--) { i原创 2012-07-24 23:13:42 · 303 阅读 · 0 评论 -
TOJ 3862 算行列式
算行列式在线性代数上学过。。展开式。。还有一种高斯消元。。不会 #include#include#define maxn 11int deter[maxn][maxn];int f(int a[maxn][maxn],int n){ int b[maxn][maxn]={0}; int i,j,k,t=0,sum=0,x=0; if(n==1)原创 2012-07-24 21:27:26 · 393 阅读 · 0 评论 -
SOJ 1824 并查集
并查集是对不想交集合上的操作,应用很多,思想比较简单,主要是2个操作,寻找父结点,合并两个集合 #include#includeint a[30010];int fa[30010];int p[30010];int find(int x){ if(x!=fa[x]) fa[x]=find(fa[x]); return fa[x];}void uion(原创 2012-07-24 21:00:25 · 322 阅读 · 0 评论 -
HDU 2899 三分查找
三分。。 #include#include#define eps 1e-7double y;double f(double x){ return 6.0*pow(x,7.0)+8.0*pow(x,6.0)+7.0*pow(x,3.0)+5.0*pow(x,2.0)-y*x;}double ts(){ double l=0,r=100,mid,midmid;原创 2012-07-24 19:43:21 · 465 阅读 · 0 评论 -
POJ 3468 线段树 区间更新
关于线段树,强烈推荐HH的博客 www.notonlysuccess.com 里面的线段树完全版POJ3468 典型的区间更新,有一个延迟标记,如果所求的区间包含这个有延迟标记的区间,直接返回,不需要遍历到叶子节点,pushdown函数将延迟标记传递给子节点这题要注意用LONG LONG#include#include#define LL long long#defin原创 2012-07-20 23:42:19 · 405 阅读 · 0 评论 -
HDU 4362 单调队列优化DP
这题作为学单调队列优化DP入门差不多。。看了一两天的单调队列 差不多弄懂了。。#include#include#include#include#include#include#includeusing namespace std;#define maxn 1010#define inf 9999999typedef long long ll;struct no原创 2013-03-19 21:51:07 · 643 阅读 · 2 评论 -
HDU 4193 单调队列
第一道单调队列的题= = 看了好久才看懂 智商着急不解释 -,-#include#define maxn 2000010int a[maxn];int sum[maxn];int q[maxn];//单调队列int main(){ freopen("in.txt","r",stdin); int n; while(scanf("%d",&n)==1&&n)原创 2013-03-17 00:48:03 · 600 阅读 · 0 评论 -
HDU 2489 DFS枚举+最小生成树
#include#include#include#include#define nn 1100#define inf 9999999using namespace std;int n,m;int g[20][20];int a[20];int fa[20];int node[20];struct eg{ int u,v,w;}edge[500];double原创 2013-03-15 00:47:48 · 615 阅读 · 0 评论 -
HDU 2196 树状DP
一开始看见这题很难,看了很久看不懂,后来仔细分析加具体模拟,可以发现此题非常巧妙关键点在理解为什么要求出最远距离和次远距离,这在由父亲节点转移时会用到。仔细分析代码吧。#include#include#include#include#include#include#include#include#includeusing namespace std;#defin原创 2013-03-25 23:21:22 · 584 阅读 · 0 评论 -
HDU 4421 2-SAT
这题我做了5小时啊亲~~昨天才学得2-SAT,今天来做这道表示对建图压力很大,= = 每次32次2-SAT 爽爆了!! 建单向边AC了 双向边就WA 但是不是G[I][J]=A[I]|A[J] G[J][I]=A[J]|A[I], 图是对称的啊。。这样下来,边不也该双向了吗?没搞懂#include#include#include#include#include#i原创 2012-11-04 13:36:38 · 470 阅读 · 0 评论 -
HDU 3622 2-SAT+二分
猪头说:很多题目要求 最大的XX 或者最小的XX 就用二分来做具体的判定用2-sat来实现基本都是这样的 这题就是二分枚举半径,用2-SAT来判定是否可行,求可能的最大的半径 #include#include#include#include#include#include#include#include#include#include#define原创 2012-11-04 00:12:34 · 393 阅读 · 0 评论 -
HDU 4081 最小生成树变形
这道题我一开始的想法就是对的,记录任意两点路径上的最大边权,然后枚举两点,找到A/B的最大值。关键是这个记录真不好记录,想来想去没什么想法,代码能力还是太弱了,想到了先生成树再来记录什么的,觉得复杂度好高,还是觉得PRIM在加边的过程中就直接记录了,想了很久,后来才想通,开一个一维数组记录它的父节点再开一个二维数组记录DP[I][J],I->J的路径上的最大边权,每加入一点,就在已原创 2012-10-14 23:50:51 · 560 阅读 · 0 评论 -
hdu 1251 1671字典树
发现没有字典树的模板,找了下HDU1251算最裸的题了 字典树真是个很厉害的东西。。。 MALLOC分配空间记得要FREE 像我1671就MLE了= = HDU 1251#include#include#includestruct dictree{ struct dictree*child[26]; int n;};struc原创 2012-09-20 09:13:25 · 387 阅读 · 0 评论 -
大数 加 减 乘 除
加 import java.math.BigInteger;import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner x=new Scanner(System.in); BigInteger a原创 2012-07-29 10:04:39 · 423 阅读 · 0 评论 -
HDU 1251 字典树
字典树 重点在建树的过程 #include#include#includestruct dictree{ struct dictree*child[26]; int n;};struct dictree *root;void insert(char *source){ int len,i,j; struct dictree *cur,*原创 2012-07-28 23:46:29 · 322 阅读 · 0 评论 -
SOJ 4139 APPLE 树状DP
树状DP 主要思想是把儿子节点的信息更新到父节点这题是最基础的树状DP #include#include#includestruct node{ int lc,rc,v;}nod[110];int n,q;int map[110][110];int dp[110][110];int vis[110];void init(){ memse原创 2012-07-24 23:40:01 · 657 阅读 · 0 评论 -
POJ 2488 DFS+记录路径 TOJ 3520 BFS+记录路径
DFS记录路径较简单,每次遍历到时都会被更改 DFS用于寻找可行解 #include#includeint map[50][50];int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};struct node{ int x,y;};int path[30][2];int n,m;原创 2012-07-18 22:07:47 · 455 阅读 · 0 评论 -
TOJ 3848 FZU 1683 矩阵快速幂
矩阵快速幂跟整数快速幂类似,都是一个二分的思想,难点在于矩阵的构造,多做题应该会好FZU 1683 #include#includeint ret[4]={4,5,3,1};int tmp[4][4];int ans[4][4];void mutMatrix(int a[][4],int b[][4]){ int i,j,k; memset(tmp,0,原创 2012-07-24 20:41:38 · 393 阅读 · 0 评论 -
SOJ 1078 贪心
好裸的贪心啊。。#include#include#includeusing namespace std;struct day{ int s,e;}a[1010];bool operator<(const day&x,const day&y){ return x.e<y.e;}int main(){ int n; while(scanf("%d原创 2012-07-24 23:22:17 · 451 阅读 · 0 评论 -
HDU 3589 二次剩余
概念原理看置顶文#include#include#include#define ll __int64#define maxn 1000010ll prime[maxn];bool isprime[maxn];ll exp(ll a,ll b,ll p){ ll res=1; for(;b;b>>=1) { if(b&1)原创 2013-02-04 23:02:35 · 850 阅读 · 1 评论 -
HDU 1787 欧拉函数模板
这题求gcd(m,n)>1的个数,用N-1-e(n)就行了#include#include#define maxn 100000010int euler(int x)//求 一个数的欧拉函数,安装定义求{ int i,res=x; for(i=2;i<(int)sqrt(x*1.0)+1;i++) { if(x%i==0)//从2开始,2是质数原创 2013-01-22 20:52:09 · 403 阅读 · 0 评论 -
HDU 1518
很明显的一道深搜,给你一些线段,看是否能拼成正方形先找到总长度,总长度不能整除4就直接输出NO找到边长在搜的过程中,出来当前值大于边长 等于边长小于边长的情况,以及何时回溯的问题注意 DFS的3个参数的一个 K来标记数组下标,当当前值等于边长的时候 要从开头开始遍历,这跟回溯不同#include#include#include#include#include#incl原创 2012-09-13 09:49:24 · 412 阅读 · 0 评论 -
HDU 1712 分组背包
这是最裸的分组背包,背包9讲上有模板代码 这题与3033不同,3033每组必须选一个,可以选多个 这题每组最多选一个,可以选1个或0个 先在组内进行01背包,再在组间进行01背包#include#includeint f[110];int a[110][110];int max(int a,int b){ return a>b?a:b;}int m原创 2012-08-22 10:50:53 · 346 阅读 · 0 评论 -
SOJ 2209 递推 大数
import java.math.*;import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); BigInteger[] a=new BigInteger[3原创 2012-07-29 10:36:26 · 415 阅读 · 0 评论 -
hdu 1269 强连通
#include#include#include#include#include#include#include#include#define inf 0x7fffffff#define maxn 10010using namespace std;int n,m;vectoredge[maxn];int dfn[maxn];int low[maxn];int sst原创 2012-07-28 22:47:13 · 960 阅读 · 0 评论