上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 30 下一页
摘要: /*题目: 马能否从(1,1)开始走完所有的格点,并且所走的格点之前都没有走过分析: dfs+回溯,分8个方向走,用Next[i,j]记录位置(i,j)的下一位的所在位置*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int X = 30;int n,m;int Next[X][X];bool use[X][X];int dir[8][2] = {{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1} 阅读全文
posted @ 2012-05-28 18:38 yejinru 阅读(153) 评论(0) 推荐(0) 编辑
摘要: /*题目: 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点 把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系过去实在 太耗时间和电话费了。他知道其他人也有一些别人的联系方式,这样他可以通知其 他人,再让其他人帮忙通知一下别人。你能帮Wiskey计算出至少要通知多少人,至 少得花多少电话费就能让所有人都被通知到吗?分析: 因为可以通过其他人来通知他们认识的人,所以这幅图可以用强连通分量变成一个 缩点的图,所有相互强连通分支变成一个缩点,求的所有缩点中入度为0的缩点即为 所求的需要通知的最小人数。然... 阅读全文
posted @ 2012-05-28 09:58 yejinru 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 题目: 每两人比赛需要裁判(第三名比赛队员充当),并且裁判的等级在两者之间,并且裁判需要在那两名选手的位置之间,问可以安排多少场这样的比赛。分析: 树状数组枚举裁判,分别求到左边位置比该队员的等级高的和等级低的选手数目,当求完之后再从左到右分别删除该项后,求到比他等级高的和等级小的,删除操作只需要modify操作时减掉1即可实现。然后根据乘法原理可知用左边的等级高的*右边等级低的+右边等级高的*左边等级低的。#include <iostream>#include <cstdio>#include <cstring>using namespace std;co 阅读全文
posted @ 2012-05-25 09:38 yejinru 阅读(287) 评论(0) 推荐(0) 编辑
摘要: /*题目: 有n种物品,现给出m种关系,每种关系a,b对应着物品b能够用物品a来换,然后有q个询问(a,b), 问物品a能不能换到物品b。分析: 如果直接dfs求传递闭包的话,会超时的。我们可以重新建图,使得图中没有环,即把强连通分支 变成缩点后用邻接表重新建图,然后dfs求传递闭包即可*/#include <cstdio>#include <vector>#include <cstring>#include <iostream>using namespace std;const int X = 5005;int dfn[X],father[X] 阅读全文
posted @ 2012-05-19 10:45 yejinru 阅读(239) 评论(0) 推荐(1) 编辑
摘要: /*找到强连通分量变成缩点后求给出出度为0的所有点以下用tarjan算法做,第一个是用结构体的邻接链表来做,第二个使用的是vector作为邻接链表*/#include <cstdio>#include <cstring>const int X = 15002;int dfn[X],low[X],stack[X],father[X],depth,top,bcnt;int counter[X],n,m;bool instack[X];struct node{ int v; node *next; void fun() { v = 0; next ... 阅读全文
posted @ 2012-05-19 09:03 yejinru 阅读(192) 评论(0) 推荐(0) 编辑
摘要: /*题目: 现给出各位选手的能力比较并给出自己的朋友的参赛号码,如何组织比赛使得自己的朋友能够获胜分析: 各选手能力比较可以构造一个有向图,而想要使得自己的朋友要赢得比赛,所以他的所在的连通块 必定是入度为0的(假设建图时是以能力大的人作为边的起点)。所以题目可以转换为先建图,然后 再找连通块求缩点,然后判断该缩点是否入度为0,若有朋友在该连通块中,即可判断可以组织这样 的一场比赛。而判断朋友在不在该连通块中,可以先求到所有的入度为0的连通块用数组置为true, 然后直接把所有朋友的所在的连通块置为false,若所有的连通块中只要还有true的连通块,就可判断 不能组织这样的一场比赛*/#in 阅读全文
posted @ 2012-05-18 16:18 yejinru 阅读(235) 评论(0) 推荐(0) 编辑
摘要: /*trie树建立,然后递归打印所有的电话号码(统计次数大于1的打印出来),内存在HOJ上爆了,应该是递归时爆栈了。。。第二个代码两个都是可以AC的,要注意POJ上是只输入一个案例,HOJ上输入多个样例39268K938MS第二个14232K891MS*/#include <cstdio>#include <cstring>#include <iostream>using namespace std;#define X 125char s[X];int n;struct trie{ int id; trie *p[10]; char s[X]; trie() 阅读全文
posted @ 2012-05-07 10:34 yejinru 阅读(213) 评论(0) 推荐(1) 编辑
摘要: /*题目: 该文符合以下三条语法为正确: 1.单一的单词p到z,大写字母:N, C, D, E, I 2.如果字符串s书写正确,则Ns同样正确。 3.若字符串s,t正确的话,则Cst, Dst, Est, and Ist同样正确分析: 递归字符串即可。若当前的字符串的长度为1,符合语法1的话,返回正确。若长度大于1的话, 若当前首字母为N,递归从第二位开始的该字符串,若成功,返回成功。当首字母为C, D, E, I, 若字符串能够分成三个部分X(C, D, E, I),s,t的话,返回成功。 分解字符串的函数可以用string中的substr函数,比如: s = "12345&quo 阅读全文
posted @ 2012-05-01 16:27 yejinru 阅读(351) 评论(0) 推荐(0) 编辑
摘要: /* 题目:给出两种图形的像素表示方法,现在给出其中一种,求另一种的像素表示方法。分析:BFS的思想 */#include <iostream>#include <cstring>#include <cstdio>#include <queue>#include <vector>using namespace std; const int X = 15; struct node{ int x,y;}; int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};//右上左下的方向偏移量char d[] = 阅读全文
posted @ 2012-05-01 12:47 yejinru 阅读(198) 评论(0) 推荐(1) 编辑
摘要: /*题目: 星星有等级,每颗星星的等级划分为在它下方(坐标轴上)有多少颗星星即为多少等级分析: 由于先输入的是x坐标,而y坐标已经是按照由小到大输入的,所以可以用树状数组来求和的形式 来求出该行星的等级。*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define X 40005int c[X],ans[X],n;int lowbit(int x){ return x & -x;}void modify(int x){ while(x<X) 阅读全文
posted @ 2012-04-30 22:18 yejinru 阅读(223) 评论(0) 推荐(0) 编辑
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 30 下一页