上一页 1 ··· 36 37 38 39 40 41 42 43 44 ··· 66 下一页
摘要: 之前有听说如果在一个迷宫中一直沿着某一堵墙走的话,那么一定可以走出这个迷宫,这题讲的就是这个内容。这题的问法比较奇怪,问你沿着左边的墙,右边的墙走所花的时间和最少所花的时间。该题难点就在与如何让dfs的时候能够沿着墙走。其实是有规律的,那就是往左边走是顺时针方向dfs,往右走逆时针方向走dfs,每次要确定上一次来的方向,这样能够确定你第一次试探的方向是那个方向。例如:如果从最左边的墙进入的话,那么首先选择往上走,否则向前走,再否则向下走,最后还是没法走的话就向左走(往回走),走了之后就直接return,每次走了之后绝对不会再换方向搜索。这题竟然错在了手写的找最短路的队列上。代码如下:#in.. 阅读全文
posted @ 2012-07-12 23:53 沐阳 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 简单的dfs搜索,题目要求是骑士可以从任意一点出发走完整个棋盘的路径。字典序输出要注意八个方向的排列顺序。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;int N, M, dir[8][2] = {-2, -1, -2, 1, -1, -2, -1, 2, 1, -2, 1, 2, 2, -1, 2, 1};int visit[10][10], rec[100][2];bool judge(int x, int y){ if (x < 1 || 阅读全文
posted @ 2012-07-12 15:44 沐阳 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 这题用map就超时了,所以用字典树来优化,第一次写静态的,现在都不习惯用指针了。由于这里不要回到源点,所以不许要所有点的度都为偶数,零个或者两个均可,图也必须是连通的。代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <string>using namespace std;char s1[15], s2[15];int idx = 0, flag = 0, ptr = 1;int set[2500005];struct Node{ int cnt, No; int 阅读全文
posted @ 2012-07-12 15:00 沐阳 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 这题用hash表做有点无病呻吟了,因为用map更快更简单。把字符串按每一位乘以相应的位置,再进行hash操作。这题还做的时候还遇到一个问题,在进行字符串复制的时候,由于直接sizeof(in)由于in在这个函数里面覆盖了全局的in所以in是一个指针变量,所以并不是15而是4,每次只赋值4个字节,肯定是错了点。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#define MOD 2000003using namespace std;char s[50], in[15], out[15];in 阅读全文
posted @ 2012-07-12 12:00 沐阳 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 该题的思路就是枚举所有的点,当然这么枚举要做到不能够重复和遗漏,所以我们约定值枚举对角线的两个点,最后将最终的结果除以2来计算。由于每次通过枚举对角线的两个点,我们还要计算出另外两个顶点的坐标,所以这里用了一个很牛的公式,直接作加减法就能够出来了,判定下是否为整数。理论上我们马上要到点集中去寻找有没有这两个点,显然这种做法的效率很低,所以这里要用hash表,将顶点的信息的查询优化到接近O(1)。这里把正方形计算另外两个顶点的公式记录如下(已知x1, x2, y1, y2, 求x3, y3, x4, y4): x1 + x2 = x3 + x4; y2 - y1 = x4 - x3; y1... 阅读全文
posted @ 2012-07-12 11:24 沐阳 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 不得不说上次看得的这句话是多么对,再差的Hash表都比map好,hash表的查找速度可不是logn能够比的。首先将5个部分拆成2+3,我们选取2的部分进行hash,然后再进行3重for循环。动态申请内存还是比不上静态的啊。代码如下:动态申请内存:#include <cstdio>#include <cstring>#include <cstdlib>#define MOD 20003using namespace std;int rec[105];struct Node{ int x; Node *next;}e[20003];void Hash(int k 阅读全文
posted @ 2012-07-12 10:15 沐阳 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 这题直接两个for循环直接TLE,所以这里要先进行一次哈希,然后一次排序,这样只要比较相邻的并且hash值相同的两个串即可。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#define MOD 100000007using namespace std;int N, a[6];struct Node{ int a[6], sum; bool operator < (Node t) const { return sum < t.s 阅读全文
posted @ 2012-07-11 09:42 沐阳 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 这题树状数组加离散化TLE,归并排序却过了。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <iostream>#define MAXN 500005using namespace std;int N, a[MAXN], c[MAXN];long long ans;void merge_sort(int l, int r){ if (r > l) { int mid = (l+r) >> 1; merge_sort(l, mid); merge 阅读全文
posted @ 2012-07-11 01:38 沐阳 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 直接暴力代码如下:#include <cstring>#include <cstdlib>#include <cstdio>#include <algorithm>#include <map>#include <string>#include <iostream>using namespace std;int N;string ans;map<string, int>mp[15]; map<string, int> :: iterator it;int main(){ int T; ch 阅读全文
posted @ 2012-07-10 01:26 沐阳 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 直接暴力。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <map>#include <string>using namespace std;char word[10005][55], c[55];map<string, int>mp;bool Del(int x){ int length = strlen(c), sum = 0; if (length != strlen(word[x])+1) { return false; } fo 阅读全文
posted @ 2012-07-10 00:17 沐阳 阅读(193) 评论(0) 推荐(0) 编辑
上一页 1 ··· 36 37 38 39 40 41 42 43 44 ··· 66 下一页