acm
wcc526
这个作者很懒,什么都没留下…
展开
-
POJ 1852 Ants
一.题意题目大意:很多的蚂蚁都在长度为L(cm)的膀子上爬行,它们的速度都是1cm/s,到了棒子终端的时候,蚂蚁就会掉下去。如果在爬行途中遇到其他蚂蚁,两只蚂蚁的方向都会逆转。已知蚂蚁在棒子的最初位置坐标,但是我们不知道他们会往哪一个方向爬。请求出所有蚂蚁掉下去的最短时间和最长时间。二.解法为了思考最长时间,考虑相遇时发生什么(相遇可以看作交错而过),不论最长还是最短,对每一只检查一次原创 2013-10-26 14:25:34 · 740 阅读 · 0 评论 -
数据结构 POJ 2431 Expedition 二叉树 并查集 POJ 1182 食物链
一.堆的实现int heap[MXN],sz=0;void push(int x){ int i=sz++;//自已节点的编号 while(i>0){ int p=(i-1)/2;//父亲节点的编号 if(heap[p]<=x)break;//如果已经没有大小颠倒则退出 heap[i]=heap[p];//父亲节点放下来,自原创 2013-11-03 12:33:57 · 1483 阅读 · 0 评论 -
图论 邻接表 二分图判定 最短路问题
一.邻接表当边有属性或顶点有属性时//样例一vector G[MXV];//边上有属性时//struct edge{int to,cost;}//vector G[MXV];//int main(){ int V,E; scanf("%d%d",&V,&E); for(int i=0;i<V;++i){ int s,t;原创 2013-11-03 14:46:05 · 1195 阅读 · 0 评论 -
数论 辗转相除法 扩展欧几里德算法 素数 快速幂
一.辗转相除法int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}原创 2013-11-03 20:00:26 · 1949 阅读 · 0 评论 -
一起来挑战Google code jam(一)
一.minimum scalar product给你两个数组va和vb,两个数组的元素对应相乘,然后求和,要求和最小,在数组元素顺序可以调整的时候。这里主要用到一个不等式,x和y两个升序的数组,那么sum(x[i]*y[i])>=sum(x[i]*y[n-i])原创 2013-11-03 22:14:33 · 1121 阅读 · 0 评论 -
acm常用技巧三 POJ 3279
一.POJ 3279const int dx[]={-1,0,0,0,1};const int dy[]={0,-1,0,1,0};int M,N;int tile[MXN][MXN];int opt[MXM][MXN];int flip[MXM][MXN];int get(int x,int y){ int c=tile[x][y]; for(int d=原创 2013-11-06 13:25:05 · 947 阅读 · 0 评论 -
acm常用技巧四 超大背包问题
一.超大背包问题pair ps[1<<(MXN/2)];void Fun(){ int n2=n/2; for(int i=0;i<1<<n2;++i){ LL sw=0,sv=0; for(int j=0;j<n2;++j) if(i>>j&1){ sw+=w[j];原创 2013-11-06 13:49:46 · 2359 阅读 · 0 评论 -
图论 最小生成树 Prim Kruskal POJ 3255 POJ 3723 POJ 3169
一.Prim 算法int cost[MXV][MXV];int mincost[MXV];bool used[MXV];int V;int prim(){ for(int i=0;i<V;++i){ mincost[i]=INF; used[i]=false; } mincost[0]=0; int res=0;原创 2013-11-03 16:21:23 · 1242 阅读 · 0 评论 -
acm常用技巧一 二分 poj 1064 poj 2456
一.二分搜索void Fun(){//lower_bound实现,不存在的情况下输出n int lb=-1,ub=n; while(ub-lb>1){//重复循环,直到解的范围<=1 int mid=(lb+ub)/2; if(a[mid]>=k) ub=mid;//如果mid满足条件解的存在范围变成(lb,mid]原创 2013-11-04 21:38:49 · 1694 阅读 · 0 评论 -
acm 常用oj
Topcoder原创 2013-12-09 13:38:28 · 1909 阅读 · 0 评论 -
acm 常用资源网站
uva toolkit原创 2013-12-09 12:42:15 · 2305 阅读 · 0 评论 -
POJ 3253 Fence Repair
一.题意有一个农夫要把一个木板钜成几块给定长度的小木板,每次锯都要收取一定费用,这个费用就是当前锯的这个木版的长度给定各个要求的小木板的长度,及小木板的个数n,求最小费用提示: 以35 8 5为例:先从无限长的木板上锯下长度为 21 的木板,花费 21再从长度为21的木板上锯下长度为5的木板,花费5再从长度为16的木板上锯下长度为8的木板,花费8总花费 = 21原创 2013-10-26 21:20:44 · 761 阅读 · 0 评论 -
动态规划 背包问题 最长公共子序列
一.01背包问题int Dp[MXN][MXN];//从pos开始选择总重小于wei的物品int Rec(int pos,int wei){ if(Dp[pos][wei]>=0) return Dp[pos][wei]; int res; if(pos==N) res=0; else if(wei<W[pos]) res=Rec(pos+1,wei)原创 2013-10-26 21:52:03 · 1104 阅读 · 0 评论 -
POJ 2386 Lake Counting
一.题意给出一个M*N的地图,有些地方被雨淹了。问这些被淹没的地方形成了多少个池塘(连同块)?( M,N二.解法void Dfs(int x,int y){ field[x][y]='.'; for(int dx=-1;dx<=1;++dx) for(int dy=-1;dy<=1;++dy) {原创 2013-10-26 15:46:10 · 630 阅读 · 0 评论 -
最大周长三角形
一.题意 n个木棍,取出三根组成周长尽量长的三角形.输出最大周长.二.nlogn解法 充要条件 ab>c) 将木棍从大到小排序,设A是最优解的最大边(B+C>A且A>B>C),即存在一个三角形ABC,则三角形ABD不会为周长最长的三角形,所以解法为将木棍从大到小排序,检查相邻的三个木棍即可.原创 2013-10-20 20:28:50 · 1887 阅读 · 0 评论 -
部分和问题
一.题意 给定n个数,判断是否可以从中选出若干,使其和为K(n二.解法int A[MXN],N,K;bool Dfs(int x,int sum){ if(x==N) return sum==K; //不加A[x] if(Dfs(x+1,sum)) return true; //加A[x] if(Dfs(x+1,sum+A[x]原创 2013-10-26 15:37:28 · 768 阅读 · 0 评论 -
区间调度问题
一.区间调度问题有n项工作,每项工作分别在start[i]时间开始,在End(i)时间结束。对于每项工作,你都可以选择参与与否,如果选择参与,那么自始至终必须全程参与。此外参与时间段不能重叠(即使是开始的瞬间与结束的瞬间重叠也是不允许的),那么最多能参与多少项工作?二.解法//算法思想:在可选的工作中,每次都选取结束时间最早的工作#include #include #incl原创 2013-10-26 19:44:12 · 1090 阅读 · 0 评论 -
POJ 3617 Best Cow Line
一.题意原创 2013-10-26 20:07:18 · 1398 阅读 · 0 评论 -
抽签问题
一.题意你的朋友提议玩一个游戏:将写有数字的n个纸片放入口袋中,你可以从口袋中抽取4次纸片,每次记下纸片上的数字后都将其放回口袋中。如果这4个数字的和是m,就是你赢,否则就是你的朋友赢。你挑战了好几回,结果一次也没赢过,于是怒而撕破口袋,取出所有纸片,检查自己是否真的有赢的可能性。请你编写一个程序,判断当纸片上所写的数字是k1, k2, …, kn时,是否存在抽取4次和为m的方案。如果存在,输原创 2013-10-26 14:41:57 · 3593 阅读 · 0 评论 -
搜索入门
一.题意 一个N*M的迷宫,每一步可以向上下左右移动,求从起点到终点的最短路径二.解法typedef pair P;char Mz[MXN][MXM]; // 迷宫数组int N,M;int sx,sy;int gx,gy;int d[MXN][MXM];//距离数组int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};in原创 2013-10-26 17:43:52 · 756 阅读 · 0 评论 -
POJ 3067 Saruman's Army
一.题意本题的大致意思是:在一个数轴上有n个点,每个点都有坐标,每个点都能覆盖±R的范围,问最少需要多少个点能够把所有的点都能覆盖。比如给的第二个样例:10 770 30 1 7 15 20 50R=10,n=7。选取坐标为7的点,能够覆盖1,7,15;选取坐标为20的点,能够覆盖20,30(或选取坐标为30的点);选取坐标为50的点,只能覆盖50;最后选取坐标为70的点。最少选取原创 2013-10-26 20:54:20 · 843 阅读 · 0 评论 -
acm常用技巧二 POJ 3061 POJ 3320 POJ 3276 尺取法
一.POJ 3061int n,S;int a[MXN];int sum[MXN];void Fun(){ for(int i=0;i<n;++i){ sum[i+1]=sum[i]+a[i]; } if(sum[n]<S){ puts("0"); return; } int res=n;原创 2013-11-06 13:00:04 · 1624 阅读 · 0 评论 -
动态规划 多重部分和 最长上升子序列 划分数 多重集组合数
一.题意给定整数a1、a2、.......an,判断是否可以从中选出若干数,使它们的和恰好为K。输入:n=4,a={1,2,4,7},k=13输出:Yes(13=2+4+7)原创 2013-11-02 15:15:45 · 2808 阅读 · 0 评论 -
acmer 知名博客
HCPC 2011 Spring On-Site Contest 解题报告 | Static Oneplushttp://www.artofproblemsolving.com/Forum/blog.php?u=30934&Graphis_xudyh的空间_百度空间ACM-ICPC 2013 World Finals 简单题解 | Crash's blogftiasch@algo线段树辅助——扫描原创 2013-12-09 21:00:41 · 1287 阅读 · 0 评论