上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页
2013年4月22日

UVA11384 - Help is needed for Dexte(正整数序列)

摘要: 大水题,自己在纸上算几个值就能看出规律。代码如下:#include int fun(int n) { if(n==1) return 1; return fun(n/2)+1; } int main () { int n; while(scanf("%d",&n)==1) printf("%d\n",fun(n)); return 0; } 阅读全文
posted @ 2013-04-22 19:33 Primo... 阅读(120) 评论(0) 推荐(0)
2013年3月31日

UVA10718 - Bit Mask

摘要: 看到这个题我们简单的思路就是从L到R逐个数的暴力,但是人家有明显提示了,所以我们要另寻妙法了要求从某个范围里找到M,使得M|N最大,如果有多个M满足最大的话就输出最小的,考虑第一个条件,找到M使得M|N最大,那么我们应该从二进制方向出发,使得M|N最大,则我们从最高位到最低位比较,如果N对应的数是0的话,在其他条件合适的话肯定让M对应的该位数为1。如果N对应的数是1的话,则此时我们为了满足第二个条件,应当使得M的该数位上的数为0,但是我们还要考虑范围因素,每次都得判断M|N是否在范围内,如果超过了,则就舍弃该数位等于1的机会,如果还不足L,则及时加上,即让该数位等与1#include int. 阅读全文
posted @ 2013-03-31 21:15 Primo... 阅读(138) 评论(0) 推荐(0)

uva10400 - Game Show Math

摘要: 看到这道题,确实让我想到了dfs,但是p=100的上限让我望而却步,,,,后来知道dfs+强剪枝或者称为记忆化搜索dp这道题为什么记忆化搜索后变得这么高效呢,从4^100>>>64000*100是怎么转变的呢,原因是这道题的特设条件,(-32000,32000)顶多有64000个状态,每个数有可能在100层中的任何一层的话,那么时间复杂度就变成了64000*100了这就是记忆化在特定区域内的作用。。。。。代码如下:#include #include #define M 105 int st[M], targe, n, pa[M], dp[M][64010]; int dfs( 阅读全文
posted @ 2013-03-31 16:44 Primo... 阅读(154) 评论(0) 推荐(0)

uva10602 - Editor Nottoobad

摘要: 大水题。。。比较前缀,,,,,代码如下:#include #include #define M 105 char st[M][M]; int path[M], fl[M]; int get_result(int a, int b) { int len = strlen(st[a]); for(int i = 0; i < len; i++) if(st[a][i]!=st[b][i]) return i; return len; } int main () { int t, n, ans, max; scanf("%d",&t); w... 阅读全文
posted @ 2013-03-31 11:19 Primo... 阅读(141) 评论(0) 推荐(0)
2013年3月29日

uva714 - Copying Books

摘要: 二分+贪心二分是在一个合理区间内找到合理的答案, 对于这个题则是在合理区间内找到最大的上限。但是我们得考虑以下得到个例:9 610 10 10 10 10 10 10 10 10AC:10 / 10 / 10 / 10 / 10 / 10 10 / 10 10WA:10 / 10 / 10 / 10 / 10 10 / 10 10 / 10考虑清楚上面这个情况。我的代码就AC了代码如下:#include #include int n, k, book[510], f[510]; long long L, R; int is_ok(long long m) { int ans = 0... 阅读全文
posted @ 2013-03-29 23:08 Primo... 阅读(147) 评论(0) 推荐(0)

uva10714 - Ants

摘要: 这个题的思路很抽象,如果一头扎进去是很难出来的,我们要站在一个高度看这个问题。其实一个任务的完成不一定只靠一个蚂蚁,:::case:一个蚂蚁A朝一个方向走,当它撞到另一只蚂蚁B的时候,虽然A按照原速朝反向走,B却朝A的方向走去了,我们可以认为A把他的任务交给了撞它的那只蚂蚁B来完成了,假如B后来再次撞到其他蚂蚁的话,那么A的这个任务继续接力似的传递下去,同理刚才A接走了B当时携带的任务,所以每只蚂蚁都能完成自己的路程。我们也可以认为每只蚂蚁都会虚体,都不会撞着对方。这样以来,题目就简单了。代码如下:#include #include int main () { int cas, l... 阅读全文
posted @ 2013-03-29 16:55 Primo... 阅读(166) 评论(0) 推荐(0)
2013年3月28日

uva10020 - Minimal coverage

摘要: 选取最少的区间来覆盖[0,M]。。。基本思想都是排序,然后处理但是难点是怎么处理100 85 98 10这样的样例,因为5,9夹在上下两者之间,但是这个区间是不起作用的,有办法避免[5,9],这个题就简单了代码:#include #include #define M 100010 int m, a[M][2], pa[M]; int comp(const void *a, const void *b) { int *aa = (int*)a, *bb = (int*)b; return aa[0]-bb[0]; } int main () { int cas, n,... 阅读全文
posted @ 2013-03-28 22:54 Primo... 阅读(171) 评论(0) 推荐(0)

uva10954 - Add All

摘要: 不错的题目,一开始的时候题意理解不清,看discuss才知道某些隐藏的题意。就是每次从现成的数列中选取最小的两个数相加,然后把新的数也加入到数列中,并把原来的两个数删掉。算法,既然开一个数组,新的成员很难加入,那就开两个数组,把所有的新成员加到新数组里,然后比较的时候也得把新数组里的数考虑进去。然后经历了TLE-RE->ACTLE是因为我用的通用算法,每次都排序。RE是因为我在循环中忘了加限制条件,代码如下:#include #include using namespace std; #define INF 0x7fffffff const int size = 5000+10; lon 阅读全文
posted @ 2013-03-28 16:28 Primo... 阅读(144) 评论(0) 推荐(0)
2013年3月27日

uva311 - Packets

摘要: 经典的贪心题目,先放大的,3x3/4,4x4,5x5,6x6,这些只能占据一个包裹的物品,再放那些小的,,,对于那些小的,先放缝隙,然后在占据新的包裹。这道以前做过,但是代码太繁琐了,经过精简,代码如下:#include int pake[7]; int main () { int n, s, ok, tt; while(1) { ok = 0; for(int i = 1; i 0) { n+=pake[1]/36; if(pake[1]%36) n+=1; ... 阅读全文
posted @ 2013-03-27 22:25 Primo... 阅读(155) 评论(0) 推荐(0)

uva10026 - Shoemaker's Problem

摘要: 大水题,,,贪心,代码如下:#include #include #define M 1010 int st[M][3]; int comp(const void *a, const void *b) { int *c = (int*)a, *d = (int*)b; if(c[0]*d[1]-c[1]*d[0]!=0) return c[0]*d[1]-c[1]*d[0]; else return c[2]-d[2]; } int main () { int t, n; scanf("%d",&t); while(t--) {... 阅读全文
posted @ 2013-03-27 20:55 Primo... 阅读(151) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页