2013年2月25日
摘要: 题目链接。分析:首先,感慨一下。。我竟然做出来了一个难度为2的(第一次)。。感谢CCTV。这题呢。。直接DFS就可以了。不过不剪枝的话TLE。第一种剪枝是如果所有可走的点的总和也小于T直接输出NO。这一种剪枝可以从TLE到843ms第二种是从课件上学的奇偶性剪枝可以从TLE到 453ms最后把两种方法合并。竟然达到了62ms(掌声响起。。)奇偶性剪枝。如下图所说。62ms AC代码如下;#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#define 阅读全文
posted @ 2013-02-25 21:32 Still_Raining 阅读(224) 评论(3) 推荐(0)
摘要: 题目链接。分析:一看这题还以为是暴搜呢。果断TLE。第二次将三个数组合并,二分查找,MLE。最后将两个两个数组合并,二分查找 AC。。。不容易啊。AC代码如下:#include <stdio.h>#include <stdlib.h>#define MAXN 510int l, m, n;int num1[MAXN], num2[MAXN], num3[MAXN], num4[MAXN*MAXN];int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}int main(){ int fl 阅读全文
posted @ 2013-02-25 17:34 Still_Raining 阅读(156) 评论(0) 推荐(0)
摘要: 题目链接。分析:先求出素数表。再DFS。#include <stdio.h>#include <string.h>#define MAXN 21int isp[MAXN+MAXN], num[MAXN], n, vis[MAXN], cnt;void prime(){ int i, j; memset(isp, -1, sizeof(isp)); isp[0] = isp[1] = 0; for(i=2; i<=MAXN+MAXN; i++){ if(isp[i]) for(j=i*i; j<=MAXN+MAXN; j += i) ... 阅读全文
posted @ 2013-02-25 17:26 Still_Raining 阅读(175) 评论(0) 推荐(0)
摘要: 题目链接。这题就是BFS。也挺水的。。看见这个时间差了吗。。很可惜。这并不是减枝。。只是同样的代码,用不同的编译器发罢了(汗。)。#include <stdio.h>#define MAXN 52typedef struct Pos{ int x, y, z; int cur;}Pos;int a, b, c;int G[MAXN][MAXN][MAXN], vis[MAXN][MAXN][MAXN];Pos queue[MAXN*MAXN*MAXN];int dx[] = {0, 0, 0, 0, 1, -1};int dy[] = {0, 0, 1, -1, 0, 0};int 阅读全文
posted @ 2013-02-25 17:19 Still_Raining 阅读(286) 评论(0) 推荐(0)
摘要: 题目链接。分析:水题,直接BFS或者DFS。dfs:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXN 22char G[MAXN][MAXN];int vis[MAXN][MAXN], cnt, m, n;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};void dfs(int x, int y){ int d; for(d=0; d<4; d++){ int nx = x+dx[d], ny = y+dy[d 阅读全文
posted @ 2013-02-25 16:37 Still_Raining 阅读(487) 评论(0) 推荐(0)