随笔分类 -  ACM

上一页 1 2 3 4 下一页

poj1083
摘要:水题一道,看清房间到底是怎么分布的看清了啊,我就是第一次没有看清这才wa的 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 int cmp (int a,int b) 7 { 8 return a>b; 9 }10 int main()11 {12 int Case;13 cin>>Case;14 int from, to;15 int room[405];16 int i,j;17 while(Ca.. 阅读全文

posted @ 2012-08-06 09:57 矮人狙击手! 阅读(169) 评论(0) 推荐(0)

poj1029
摘要:这一题和前面做的一道题几乎是一样的,只不过是有个地方犯傻了,唉,wa了好几次说下思路,如果是=,则把每个值都赋为2000(这个数一定要比比较的次数大啊,我刚开始开了100,wa了好几次,唉,你说这能不让人窝火吗)如果是<,把左边的值不为2000的数减一,右边不为2000的数加1如果是>,则反过来最后查找不为2000的绝对值最大的数,则该数必为假币,至于是否会输出0这个结果,那就要看不为2000的绝对值最大的数知否只有一个,如果只有一个,那就是要求的结果,如果多个,那么就输出0 1 #include <iostream> 2 #include <stdlib.h&g 阅读全文

posted @ 2012-08-05 19:03 矮人狙击手! 阅读(882) 评论(0) 推荐(0)

poj2560(prim)
摘要:日啊,g++一直过不去,c++一次过,这是为什么啊啊啊啊啊啊啊 1 #include 2 #include 3 #include 4 using namespace std; 5 6 struct point 7 { 8 double x; 9 double y;10 };11 point a[105];12 int visited[105];//是否访问过13 double len[105][105];//任意两个点之间的长度14 int n;15 16 double prim()17 {18 double sum=0;19 double lowcos... 阅读全文

posted @ 2012-08-04 11:25 矮人狙击手! 阅读(237) 评论(0) 推荐(0)

poj1062
摘要:转自:http://blog.sina.com.cn/s/blog_676070110100mjya.html 1 题意:昂贵的聘礼,好题!!! 2 算法:分两步:1、建图 2、从底到上逐个求每个点的最小费用。具体实现见程序注释。 3 #include <iostream> 4 using namespace std; 5 const int MAX=120; 6 int M,N,X,T,V; //等级限制 物品总数 替代品总数 替代品的编号 优惠价格 7 int map[MAX][MAX]; //初始化全为0 map[i][j]=-1:i和j不... 阅读全文

posted @ 2012-08-04 09:15 矮人狙击手! 阅读(320) 评论(0) 推荐(0)

最短路径问题
摘要:Description平面上有n个点(n<=100),每个点的坐标均在-10000到10000之间.其中的一些点之间有连线.若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离.现在的任务是找出从一点到另一点之间的最短路径.Input共n+m+3行第一行为整数n.第2行到第n+1行,每行两个整数x和y,描述了一个点的坐标(以一个空格分开)第n+2行为一个整数m,表示图中连线的个数.以后的m行,每行描述一条连线,由两个整数i和j组成,表示第i个点和第j个点之间有连线.最后一行;两个整数s和t,分别表示源点和目标点.Output仅一行,一个实数(保留两位小数),表示 阅读全文

posted @ 2012-08-03 20:14 矮人狙击手! 阅读(347) 评论(0) 推荐(0)

poj1065
摘要:其实是水题一道啊其实还是要好好想想到底按照什么排序的 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 struct stick 6 { 7 int l; 8 int w; 9 int flag;10 };11 stick a[5005];12 13 14 int cmp( stick a, stick b)15 {16 if(a.l!=b.l) return a.l<b.l;17 else return a.w<b.w;18 }19 20 int main(... 阅读全文

posted @ 2012-08-03 18:42 矮人狙击手! 阅读(156) 评论(0) 推荐(0)

poj1011
摘要:这篇文章我参考了很多http://hi.baidu.com/jobxys/blog/item/d11aa30086863a13728b6594.html题目大意:给出一些长度不大于 50 的木棍, 要求你把这些小木棍拼成* 长度相同木棍,当然长度越小越好。* 解题思路:这个题最近做了很多次,我比较有发言权了。* 思想很简单,一个接一个的把木棍拼起来,最后把木棍用光。* 关键的地方是几个剪枝技巧:* 设所有木棍的总长度为 Sum, 最终的答案是 L。* 1. 首先要明白, Sum一定要能被 L 整除。* 2. L 一定 大于等于 题目给出的最长的木棍的长度 Max。* 由上述两点,我们想到,可以 阅读全文

posted @ 2012-08-03 15:52 矮人狙击手! 阅读(2984) 评论(0) 推荐(3)

hdu4217
摘要:这个代码超时了,不知道为什么会这样,已经用了线段树啊 1 #include <iostream> 2 3 using namespace std; 4 5 int pos; 6 7 int tree[600000]; 8 void build(int left ,int right ,int i) 9 {10 tree[i]=right-left+1;11 if(left==right)12 {13 return;14 }15 int mid=(left+right)/2;16 build(left,mid,2*i);17 ... 阅读全文

posted @ 2012-08-02 22:18 矮人狙击手! 阅读(273) 评论(0) 推荐(0)

hdu4325
摘要:本来以为要用线段树来作,不过最后发现没有必要#include <stdio.h>int q[100005];int main(){ int Case; scanf("%d",&Case); int n,m; int s,t; int k=1; int i,j,c; while(Case--) { for(i=0;i<100005;i++) { q[i]=0; } scanf("%d%d",&n,&m); for(i=0;i<n;i++) { ... 阅读全文

posted @ 2012-08-01 18:09 矮人狙击手! 阅读(172) 评论(0) 推荐(0)

hdu1166
摘要:尼玛,无力吐槽,搞了几个小时,没想到是输出Case 时出错这种类型是线段树,关于线段树,线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,因此有时需要离散化让空间压缩。参照这个图理解下建树:void build(in.. 阅读全文

posted @ 2012-08-01 17:10 矮人狙击手! 阅读(1078) 评论(0) 推荐(0)

hdu4320
摘要:链接:http://acm.hdu.edu.cn/showproblem.php?pid=4320题目大意:a中的质因数都在b中#include <iostream>using namespace std;long long gcd (long long a,long long b){ return b==0?a:gcd(b,a%b);}int main(){ int Case; cin>>Case; int k=1; long long a,b,c; while(Case--) { cin>>a>>b; c=gcd(a,b... 阅读全文

posted @ 2012-08-01 09:04 矮人狙击手! 阅读(174) 评论(0) 推荐(0)

2012 Multi-University Training Contest 3
摘要:1001检查A中的质因子 是否都在 B中被包含。1002按位统计计算,如果枚举 那么复杂度就是 64 * N第一条当统计第K位的时候 可以注意到 第 B+T*A 和 B+(T+2^(K+1))*A 位是相同的那么 第K位的时候 只需要统计2^K 次就可以了第二条当统计第K位的时候 可以注意到 连续的 (2^K)/A都是连续的0 或者连续的1 所以可以考虑直接连续记录(2^K)/A个结果。 那么 第K位的时候 只需要统计N / ((2^K)/A)次就可以了 综合 第一条 第二条 那么 第K位的时候 只需要统计 2^K/((2^K)/A) 复杂度 变为O(A) 总... 阅读全文

posted @ 2012-07-31 21:03 矮人狙击手! 阅读(229) 评论(0) 推荐(0)

zoj1414
摘要:我是傻得不能再傻了,把整个过程模拟出来了,还很高兴,提交之后发现空间超了,看了下别人的原来是找规律啊坐标中表述的x,y 只有2种关系 :要么x = y, 当X为偶数 则所求数是2*x, 若为奇数,则2*x -1。要么x - y = 2. 当X为偶数 则所求数是2*x + 2, 若为奇数,则2*x +1。唉,可怜我原来的代码虽然没有过还是贴出来安慰下自己吧#include <stdio.h>#include <string.h>int a[5005][5005];int main(){ a[0][0]=0; a[1][1]=1; a[2][0]=2; a[3][1]=3; 阅读全文

posted @ 2012-07-31 09:47 矮人狙击手! 阅读(222) 评论(0) 推荐(0)

zoj1115
摘要:水题一道,不过输入的时候欠思考,wa了一次代码:#include <stdio.h>#include <string.h>int work(int n){ int sum=0; while(n) { sum=sum+n%10; n=n/10; } return sum;}int main(){ char a[1000]; int n; while(1) { n=0; scanf("%s",a); int i; for(i=0;i<strlen(a);i++)... 阅读全文

posted @ 2012-07-31 09:03 矮人狙击手! 阅读(353) 评论(0) 推荐(0)

zoj1110
摘要:说来惭愧,本以为是到简单题,但是就是捋不清思路,痛苦啊贴下代码吧:#include <stdio.h>int main(){ int s,p,y,j; int d=0,c=0,t=0; int i=0; while(scanf("%d %d %d %d", &s, &p, &y, &j) != EOF)//这里突然让我想到了一点,在c语言里while(),括号里不可以是true,只能是1,估计是用vc6.0用习惯了,用codeblocks就很不习惯,不过还是严格点好 { i=(12+j-y-p)/3; t=i; c=i+p... 阅读全文

posted @ 2012-07-31 08:19 矮人狙击手! 阅读(363) 评论(0) 推荐(0)

poj1651
摘要:题目链接:http://poj.org/problem?id=1651题的大意是:给出一组N个数,每次从中抽出一个数(第一和最后一个不能抽),该次的得分即为抽出的数与相邻两个数的乘积。直到只剩下首尾两个数为止。问最小得分是多少?归类:动态规划该问题可以转化成矩阵连乘问题(当然也可以不转化),状态转移方程为:dp[i][j] = min(dp[i][k] + dp[k][j] + x[i] * x[k] * x[j])i + 1 <= k <= j - 1,小小的解释下状态转移方程的意思,dp[i][j]表示把第i个数字到第j个数字之间(不包括i,j)的数字去光后得到的最小值,假设k 阅读全文

posted @ 2012-06-26 01:25 矮人狙击手! 阅读(2230) 评论(0) 推荐(0)

poj3262
摘要:正确的应该按照D/T从大到小排序。证明如下:任取两头牛i和j,这两头牛需要的总时间为2*(Ti+Tj),在此时间中其他牛吃的花是一定的,因此只要考虑这两头牛就可以了。若先送牛i,则牛j吃掉的花为2*(Ti*Dj),若先送牛j,则牛i吃掉的花为2*(Tj*Di),我们只要在两者里取个小的就可以了。注意到T,D是大于0的,因此只要在DJ/TJ和DI/TI里取一个小的。证毕。#include <iostream>#include <algorithm>using namespace std;struct node{ int t; int d; //int state;};in 阅读全文

posted @ 2012-05-25 16:20 矮人狙击手! 阅读(285) 评论(0) 推荐(0)

hdu1789
摘要:链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789典型的贪心问题,水题(又一次把1000看成了100,唉,wa一次)#include <iostream>#include <algorithm>using namespace std;struct homework{ int deadline; int score; int state;};int cmp(homework a,homework b){ return a.score>b.score;}homework a[1005];int visit[1005];i 阅读全文

posted @ 2012-05-25 16:04 矮人狙击手! 阅读(592) 评论(0) 推荐(0)

hdu2037
摘要:链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037这道题给我的启示是排序的问题,刚开始自己做的时候我对开始时间进行排序,造成了必须两重循环才能结束,采用如下排序,一重循环即可。#include <iostream>#include <algorithm>using namespace std;struct view{ int start; int end;};int cmp(view a,view b){ if(a.end==b.end) return a.start<b.start; else return a.e 阅读全文

posted @ 2012-05-25 09:05 矮人狙击手! 阅读(234) 评论(0) 推荐(0)

poj1323
摘要:题目大意:n个人在玩牌,每个人有m张牌,于是就有n*m张牌(每张牌都有一个值,介于1到n*m之间,不重复),然后进行m轮游戏,每轮每个人都出一张牌,牌最大的那个人就赢了,然后给出n和m,以及你的m张牌,问你最多能赢几轮?#include <iostream>using namespace std;int a[1010];int n,m;int hava(int i){int j;for(j=0;j<m;j++)if(a[j]==i) return 1;return 0;//这里千万要注意,不可写为else return 0,若这样写,编译器把if,else视为一个快语句。切记 阅读全文

posted @ 2012-05-25 01:49 矮人狙击手! 阅读(312) 评论(0) 推荐(0)

上一页 1 2 3 4 下一页

导航