- 博客(32)
- 资源 (7)
- 收藏
- 关注
原创 S-Trees UVA712(二叉树)
题目读了半天,差点被吓住!题目本身很简单,就是一颗满二叉树,向左(2*temp),向右(2*temp+1),最后减去(1#include#includeusing namespace std;const int maxn=1<<8;const int maxn2=10000;char X[8][2];char Term[maxn];char Common[maxn2];int
2017-01-24 22:39:42 524
原创 HDU 2553 n皇后问题(回溯)
本题用回溯法求解(采用边生成边检查的方式),当不满足条件时当前路径不再继续向下搜寻,而继续另外路径的搜寻(这样就不会枚举所有的)。通过逐行向下判断(每行一个皇后),每行都尝试将皇后放在不同的列,然后判断其是否满足条件(同一列、同一对角线不能有两个以上的皇后)此题n测试数据中会有大量重复数据,因此要保存答案,遇到曾经计算过的n直接输出即可,否则可能会超时。#include#incl
2017-01-24 14:38:28 528 1
原创 Parentheses Balance 平衡的括号 UVA 673 (DFS求解)
#include#includeconst int maxn=128+2;bool flag1=true;char s[maxn];int len1;void dfs(int &i){if(s[i]==')' || s[i]==']'){ flag1=false; return ;}else if(s[i]=='('){ while(true){ i++; if(i>=
2017-01-15 13:32:28 345
原创 hdu 1251 统计难题 (Map的使用)
对于map的一点了解 :首先,会在map查找这个键值的项,map如果不包含某个键值,会返回map的end,然后它发现此键值没有找到(_Where == this->end())的话,会自动在末尾插入(this->insert(_Where)一个以你输入的键值和value的默认值(mapped_type())构成的对儿(pair),然后返回这个插入项的值(second,键是first)。而int
2017-01-14 23:50:56 302
原创 HDU 1242 Rescue (BFS + 优先队列)
#include#include#includeusing namespace std;const int maxn=200+10;char p[maxn][maxn];int d[maxn][maxn];struct node{ int x,y; node(int x1=0,int y1=0):x(x1),y(y1){} bool operator<(const node &
2017-01-14 20:53:20 287
原创 Undraw the Trees 看图写树 UVA 10562 (DFS)
本题是一道DFS练习题 ,需要注意一些条件的判断如 '\0',n 的值 等等,详情见代码#include#includeconst int maxn=200+10;char tree[maxn][maxn];int n;void dfs(int r,int c){ printf("%c(",tree[r][c]); if(r+1 while(r+2=0 &&
2017-01-13 23:55:45 500
原创 Play on Words 单词 UVA 10129 (欧拉+dfs)
概念:无向图中欧拉道路(也叫欧拉通路),需要满足的条件图是连通的并且最多只有两个奇顶点(这两个奇顶点是欧拉通路的端点);欧拉回路:图是连通的并且没有奇顶点。有向图中也相似:欧拉道路:图是连通的并且除两个顶点外所有的点的出度等于入度 并且这两个顶点中 一个是出度多1,一个是入度多1;欧拉回路:图是连通的并且所有的顶点的出度等于入度。解题思路:把单词首、尾看做顶点,中间看做带有
2017-01-13 20:17:52 308
原创 Ordering Tasks 拓扑排序 UVA 10305
解题思路:t[]数组三种状态,-1(正在访问),0(未访问),1(已经访问)为什么访问完一个结点之后要把它放在拓扑序列的首部:因为对于(u,v)两个元素,v始终比u先进入序列(当然是由于dfs的缘故啦)#include#includeconst int maxn=100+5;int c[maxn];int topo[maxn];int G[maxn][maxn];int
2017-01-13 10:45:28 257
原创 HDU 1425 Hash求解
本题用快排也可以过 (时间复杂度(nlgn)); Hash 时间复杂度 n;快排:#include#includeusing namespace std;const int maxn=1000000+10;int a[maxn];bool cmp(int a,int b){return a>b;}int main(){ int n,m; while(scan
2017-01-12 21:28:30 416
原创 HDU 杭电 1496 (Hash求解)
看到这题首先想到的是四重for循环,肯定超时,但还是很想试一下,结果和预期一样;然后就换成三重循环,结果还是超时;最后就换成 hash求解(第一次接触)两重循环。由题意可得a*x1*x1+b*x2*x2=-(c*x3*x3+d*x4*x4)才满足条件,hash数组至少开20W (因为50 * 100 *100+50 *100 *100=10W).如果有兴趣了解hash可以访问 htt
2017-01-12 19:58:49 619 1
原创 Quadtrees UVA 297 四分树
// 2 1// 3 4对于四分树来说,给出了它的先序序列就可以确定整棵树了,因为对任意一个节点不是叶子就是父节点,对于一个父节点一定有四个子节点(就和完全二叉树一样,通过先序就可以确定整棵树了)。题目大意是:整块的黑色区域的像素是1024,因为有些部分白色,所以通过四等分直到整个小区域都是黑色为止,最小可以分为(32*32=1024)个,每个小区域表示1像素。所以程序中通过递
2017-01-11 20:01:59 357
原创 HDU杭电 1253 胜利大逃亡(图 BFS)
本题难度并不大,一个普通的用BFS求解的题,值得注意的是数据的输入(三维数据输入被绕了几圈);还有就是最后的出口可以表示墙,无法出去(就是没考虑到这点WA了一次);剩下的就是BFS的常规思路及框架了。#include#include#include#includeusing namespace std;const int len=50+10;int K,A,B,C,T;stru
2017-01-11 19:32:18 353
原创 广度优先搜索( 图 BFS)练手题
追赶妖怪Description一身正气的钟馗四处降妖,一天他发现一只狐妖正在祸害百姓,他连忙追赶上去准备除妖,可是狐妖很聪明,她自知敌不过钟馗,便逃入山林,企图消耗钟馗的体力。钟馗在树林里面可以自由移动,而且他有一个法术:可以从当前坐标(x,y)直接移动到(2x,2y)的位置。钟馗为了不枉送性命,找到人称"人间诸葛亮"的你,希望你能帮他判断他能否在体力未耗尽到达狐妖的藏匿地点(如果
2017-01-11 10:22:01 2141 1
原创 Abbott's Revenge UVA 816(图 BFS)
题目大意:有一个 9 * 9 的交叉点的迷宫。 输入起点, 离开起点时的朝向和终点, 求最短路(多解时任意一个输出即可)。进入一个交叉点的方向(用NEWS表示不同方向)不同时, 允许出去的方向也不相同。 例如:1 2 WLF NR ER * 表示如果 进去时朝W(左), 可以 左转(L)或直行(F), 如果 朝N只能右转(R) 如果朝E也只能右转。* 表示这
2017-01-11 09:41:59 357
原创 The Falling Leaves 下落的树叶 UVA 699(二叉树)
#include#includeusing namespace std;const int maxn=10000;int sum[maxn];void buildtree(int t){ int temp;cin>>temp; if(temp==-1)return ; sum[t]+=temp; buildtree(t-1);buildtree(t+1);}bool int
2017-01-09 15:42:33 342
原创 Not so Mobile 天平 UVA839
#includeusing namespace std;//通过引用返回左右重物之和bool solve(int& W){ int Wl,Dl,Wr,Dr; cin>>Wl>>Dl>>Wr>>Dr; bool b1=true,b2=true; if(!Wl)b1=solve(Wl); if(!Wr)b2=solve(Wr); W=Wl+Wr; return
2017-01-09 10:23:57 222
原创 Tree UVA 548(DFS)
解题思路:对于给定的二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据后序遍历找到树根。然后在中序遍历中找到树根,从而找出左右子树的结点列表,然后递归构造左右子树。本题最不容易理解的就是构造树,当然需要耐下心来仔细理解#include#include#includeusing namespace std;const int maxn=10000+10;int in
2017-01-09 08:50:31 206
原创 Trees on the level 树的层次遍历 UVA 122(BFS)
#include#include#include#includeusing namespace std;const int maxn=260;struct node{ bool have_value; //判断是否被付了值 int value; //结点值 node*left,*right; //左右子结点
2017-01-08 15:36:38 340
原创 Dropping Balls 小球下落 UVA 679
解题思路:本题数据比较大,所以不采取数组储存;题目中的小球个数 I 如果为奇数时,它往左边走的小球个数是(I+1)/2个;偶数是往右边 I/2个。#includeint main(){ int T; while(scanf("%d",&T)==1 && T!=-1){ while(T--){ int D,I; scanf("%d%d",&D,&I);
2017-01-07 23:51:51 282
原创 Broken Keyboard 破损键盘 UVA 11988
#include#includeconst int maxn=100000+10;int linked[maxn]; //通过数组模拟链表char s[maxn];int main(){ while(scanf("%s",s+1)==1){ //输入保存在s[1],s[2]....中 int len=strlen(s+1);
2017-01-07 21:32:07 363
原创 Matrix Chain Multiplication 矩阵链乘 UVA 442
解题思路:首先解决如何保存输入字母所对应的两个值,通过定义结构体数组nt[0]表示字符'A',以此类推;然后通过通过栈来储存输入的字母,遇到")"时出栈两个元素做运算("(" ")"不入栈)。#include#include#include#includeusing namespace std;struct note{ int a,b; note (int a1=0,in
2017-01-07 08:41:58 467
原创 Printer Queue 打印队列 UVA 12100
解题思路:我的做法是通过队列queue(保存队列)和vector容器(通过sort完成从小到大的排序)完成,只有遇到队列中优先级最高(数字最大)才能移除队列,时间加1(total++);而指定的元素位置仍用m标识,每一次移动m都向前挪动一个。当队列中元素移除一个时,最大元素就变了(通过v--来控制)#include#include#include#includeusing na
2017-01-06 09:49:11 540
原创 Symmetry(对称轴)UVA 1595
解题思路:本题的突破点在于通过最左边和最右边的点寻找对称轴,我的想法是利用set集合排序(由于用了结构体,故要重写#include#includeusing namespace std;struct note{ int x,y; bool operator return x }};set set1;int main(){ int T; scanf(
2017-01-05 22:25:01 676
原创 Compound Words(复合词) UVA 10391
解题思路:这道题开始考虑通过合成单词来做,结果超时(复杂度n*n);后面考虑通过分解单词来做(复杂度n*m(m表示单词平均长度))AC了,需要用到string中的分解函数substr(可以在STL中查询)#include#include#include#includeusing namespace std;vectorvec; //通过下标遍历输入的单词s
2017-01-05 12:51:05 605
原创 Foreign Exchange (交换学生)UVA 10763
解题思路:用两个vector容器分别储存输入的两个值,然后通过set储存所有不同的元素,通过set遍历所有元素,vec1[*iter]下标表示交换的学校(A, B)。看了下网上有个反列(10 20 20 30 30 10)所以在最后判断处添加了(n%2==0)偶数个人才能交换。#include#include#includeusing namespace std;c
2017-01-05 10:02:51 382
原创 Throwing cards away I 卡牌游戏 UVA 10935
解题思路:本题通过STL中的队列queue很容易就写出代码,唯一值得注意的是当输入为1时;#include#includeusing namespace std;queueq;int main(){ int n; while(scanf("%d",&n)==1 && n){ for(int i=1;i q.push(i);
2017-01-04 22:48:20 308
原创 Ducci Sequence UVA 1594
本题用了两种解法:解法一是直接通过数组,当所有元素为0时,退出循环解法二则是为了练习STL中容器的使用,利用set容器元素不重复的特点,当元素不同时向set中插入元素,(count()方法判断)有相同时 即为循环;解法一:#include#includeconst int len=20;int a[len];int solve(int n){ for(int i=
2017-01-04 17:27:26 259
原创 Alignment of Code (代码对齐)UVA1593
题意如下:输入若干行代码,要求各列单词的左边界对齐且尽量靠左。单词之间至少要空一格。每个单词不超过80个字符,每行不超过180个字符,一共最多1000行。 注意输出时每行的最后一列后面没有空格符。读取字符串的方式和网上一些代码不同,我的稍微复杂了点(我是一个一个字符读,他们是一行一行读),因为在这之前做了一个以这种方式读取的题,所以遇到这道题时,就选
2017-01-04 10:24:36 511
原创 Database UVA 1592数据库
解题思路:两列两列的遍历,从上到下扫描各行,把每一行c1,c2两列的内容作为一个二元数组储存到一个map当中(将输入的每一个不同的字符串分配一个编号(和集合栈计算机做法类似));如果map的键值中已经存在这个二元组,则二元组映射的就是所求的r1,而当前行就是r2。还需要注意一点:结构体用于map,set容器时必须重载#include#include#include#incl
2017-01-03 15:32:33 803
原创 Unix ls UVA 命令400
方法一:(用sort排序)(#include)#include#include#include#includeusing namespace std;const int maxn=105;string str[maxn];void print1(string s,int maxlen){ //在字符串后面加上空格以满足要求 int len=maxle
2017-01-02 20:51:25 341
原创 Ugly Numbers UVA 136 丑数
解题思路:首先丑数是指不能被2,3,5以外其他素数整除的数。最小的丑数数1,对任意一个丑数x; 则2x,3x,5x也都是丑数,一个丑数有多种生成方式,所以,每取出一个丑数都要进行判断是否已经生成过(通过set集合元素不重复的性质),还需要注意的是,本题数据应该用long long 类型存储,故自定义类型ll (typedef long long ll)。#include
2017-01-01 10:22:55 378
原创 Team Queue UVA 540 (团体队列)
#include#include#include#include#includeusing namespace std;const int maxn=1010;int main(){ int t; int count=0; while(scanf("%d",&t)==1 && t){ mapmp; for(int i=1;i int n
2017-01-01 08:30:54 355
channel_v3.json
2019-01-21
hibernate注解开发所需的jar包
2017-12-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人