UVa 紫书
笑对这个世界的志贵
这个作者很懒,什么都没留下…
展开
-
Tex Quotes, UVa 272
Problem Description TeX中,左双引号是”““,右双引号是””“。输入一篇包含双引号的文章,你的任务就是把它转换成TeX的格式。Sample Input “To be or not to be,” quoth the Bard, “that is the question”. The programming contestant replied: “I must dis翻译 2017-04-22 08:26:19 · 433 阅读 · 0 评论 -
【DFS】UVA - 1103 Ancient Messages
Problem Description 给你一个n行m列的矩阵,其中的字符代表的是十六进制,你需要将其转换成二进制,然后1代表黑点0代表白点,他们能够构成很多图像,这些图像只出现六种类型,具体的看题目,让你按字典序输出图像对应的字母代码:因为这六个图像的“洞”的个数都不一样,所以可以利用这个条件来区分图像,接下来就是需要你如何判断这个图像有几个洞。mmp数组代表转换后的图像。0代表白点,1代表翻译 2017-06-03 19:56:20 · 271 阅读 · 0 评论 -
【BFS + 保存路径】UVA - 816 Abbott's Revenge
Problem Description 给你起点,给你起点的方向,给你终点,让你求起点到终点的最短路径。它会给出很多个点,告诉你在这个点你只能怎么走,”NEWS”分别对应北东南西,也就是上右下左,”FLR”分别代表直走 左转 右转。所以假如一个路口给你 “WLF”就代表如果你进来的时候朝下,你就只能左转或者直走。代码:复杂点就多了 转弯方向的问题而已,理解了也不难。当前的方向,怎么转朝哪,都转翻译 2017-06-03 20:12:00 · 307 阅读 · 0 评论 -
【拓扑排序模板题DFS方法】UVA - 10305 Ordering Tasks
Problem Description 给你n个点,还有m个关系,让你输出拓扑排序后的结果代码:因为之前学习过拓扑排序,用之前的方法很轻松的A了,后面看到dfs解决的就去学习学习,还看了挺久的才看懂。。#include<bits/stdc++.h>using namespace std;int n, m, t;int Map[105][105], Pre[105], vis[105];翻译 2017-06-03 20:19:57 · 367 阅读 · 0 评论 -
【欧拉路的判断 DFS判断连通】UVA - 10129 Play on Words
Problem Description 给你T组数据,每组数据给你一个n,接下来有n行,每行代表一个字符串,问你能不能把他们连接起来,这个串的尾字母,等于另外一个串的首字母,他们就能连起来。代码: 典型的判断欧拉回路的题目,核心:判断欧拉路要满足,该图是连通,而且度数为奇数的点,两个或者没有,为了防止重复的字符串,所以还要满足入度和出度差值的绝对值,不能大于1#include<bits/std翻译 2017-06-03 20:27:45 · 388 阅读 · 0 评论 -
【割点】UVA - 315 Network
Problem Decription 很裸的求割点 个数的题目。第一行给你n,代表该图有n个点。接下来每行给你一个u,u == 0退出循环,给你很多v,代表u到v有一条无向边。思路:num[]数组记录该点第几个走到(num[]值是不变的),low[]值是不断更新的,最开始等于num[]值,找到祖先了也就是更小的num[]的时候就更新。回溯的时候和孩子的low[]值比较更新,因为孩子能到的地方,翻译 2017-08-04 10:40:59 · 207 阅读 · 0 评论 -
【割边 && 桥】UVA - 796 Critical Links
Problem Description 给你n个点的图,让你求出有几个桥,按字典序大小输出思路:会了割点,割边就是改一下 low[v] > dfn[u] 代表,u-v是割边, 裸的模板题,就不弄注释了,心累,看不懂代码,先去看割点#include<bits/stdc++.h>using namespace std;#define mm 10004struct node{ int翻译 2017-08-04 10:48:32 · 216 阅读 · 0 评论 -
【BFS && 树】UVALive - 7460 Maximum Cut Order
Problem Description 给你T,代表有T组测试数据,每组测试数据给你三个数n,s,m,n代表有n个结点1-n。s代表输出的起始点。m:代表两点之间的边权等于两点的编号相减的绝对值对m取模。让你输出序列,以s开始的序列。该序列满足距离现有的点,最大的边权点进来,如果边权一样,编号最小的点进来。思路: 建边,因为1-n个点,而且是完全二叉树的结构。我们可以根据root的儿子是r翻译 2017-08-23 14:22:15 · 201 阅读 · 0 评论 -
【割点 && dfs】UVALive - 7456 Least Crucial Node
Problem Description 给你n,s,m分别代表n个点,s为特殊点,m条边。让你求去掉那个点?使得其他点不能到达s点的点最多。如果存在割点,一样多的。输出编号最小的。思路: 割点的条件, low[to] >= low[u],u就是割点。所以我们求出割点后,我们可以根据这个条件去dfs,low[to]>=low[u]的to点,这些点都不能到达特殊点。我们记录个数。求出最大个数对翻译 2017-08-23 14:07:01 · 237 阅读 · 0 评论 -
【求最小割边集】UVA - 10480 Sabotage
Problem Description 输入n, m代表有n个点,m条边。接下来m行,每行输入u, v, w代表u到v边权w(双向)。让你求1-2最小割边集思路: 先求最小割(也就是最大流),这时候如果是割边,就代表这条边的流量为0。所以图就被割边分开为两个图包含1的图 和 2包含2的图。找出将他们分开的割边就可以了。跑1,能走到的点都标记一下。那么输入的边的点满足一个被标记一个不被标记就翻译 2017-09-27 20:28:26 · 479 阅读 · 0 评论 -
【欧拉函数 && 求gcd(n, x) = y,x的个数】UVA - 11426 GCD - Extreme (II)
Problem Description G=0; for(i=1;i<N;i++) for(j=i+1;j<=N;j++) { G+=gcd(i,j); } 输入一个N,输出G思路:参考了一个很不错的博客 我们令f[n]表示1到n-1与n的gcd的和,那么G[n] = G[n-1] + f[n]; a[i]表示与gcd(n, x)= i 的x的个数翻译 2017-10-18 20:22:20 · 291 阅读 · 0 评论 -
【中国剩余定理 && 枚举 && 思维】UVA 11754 Code Feat
Problem Decription 有一个正整数N满足C个条件,每个条件都形如“它除以X的余数在集合{y1, y2, …, yk}中”,所有条件中的X两两互素,你的任务是找出最小的S个解。思路: “除以X的余数在集合{Y1, Y2, …, Yk}中”这个条件很不好处理。如果我们知道这个余数具体是Y1,Y2,…Yk中的哪一个,问题就会简单很多。一种容易想到的方法是枚举每个集合中取那个元素,翻译 2017-10-19 19:49:19 · 270 阅读 · 0 评论 -
【离散对数 && 逆元 && 概率论】UVA - 11916 Emoogle Grid
Problem Description 有这样一道题,要给一个M行N列的网格涂上K种颜色,其中有B个格子不能涂色。其他每个格子涂一种颜色,同一列中的上下两个相邻格子不能涂相同颜色。给出M, N, K 和 B个格子的位置,求出涂色方案总数除以100000007的结果R。 本题的任务和这个相反:已知N, K, R 和 B个格子的位置,求最小的可能的M。思路: 一列一列地涂色,每列从上往下翻译 2017-10-21 10:27:02 · 316 阅读 · 0 评论 -
【数论 && 找规律】UVA 11752 The Super Powers
Problem Description 让你编写一个程序,求出1到2^64-1范围内的,所有超级力量数。超级力量数满足,可以分解为两个以上数的幂。例如64 = 8^2 = 4^3。两个以上所以64满足。思路: x^y,只要y不是素数,y就可以分解为两个数的乘积。这样就肯定有两个以上的数的幂满足。 要注意数据范围 2^64得用无符号unsigned long long。y最小是4。那翻译 2017-10-23 10:59:27 · 182 阅读 · 0 评论 -
【素数 && 快速幂】UVA - 10006 Carmichael Numbers
Problem Description 输入一个数,如果这个数不是素数同时满足(x^n)%n == x其中(x > 1, x < n)思路: 正常就x^n的次方,求n次,会超时,所以用快速幂。#include<bits/stdc++.h>using namespace std;long long Pow(long long x, long long n, long long mod)翻译 2017-09-01 10:31:34 · 191 阅读 · 0 评论 -
UVa 1587 Box 判断6个面能否构成长方体
Problem Description 给定6个矩形的长和宽wi和hi(1<=w, hi <= 1000),判断它们能否构成长方体的六个面。Sample Input 1345 2584 2584 683 2584 1345 683 1345 683 1345 2584 683 1234 4567 1234 4567 4567 4321翻译 2017-04-24 20:36:28 · 2820 阅读 · 0 评论 -
【DP 三维数组】UVA - 11420 Chest of Drawers
Problem Description 给你一个柜子,至上往下有n个抽屉,问你恰好s个是安全的,有多少种情况。 例如至上往下第三个是锁着的,但是第二个并不是锁着的。那么第三个不安全,如果第四个是锁着的,那么第四个安全。 如果至上往下第一个是锁着的,那么第一个安全。思路: dp[i][j][0]代表着当前i个抽屉,j个安全,最下面那个是不锁着的情况数,dp[i][j][1]代表最翻译 2017-12-20 17:35:11 · 464 阅读 · 0 评论 -
【容斥原理+逆元+组合数+费马小定理+快速幂】UVALive - 7040 Color
Problem Description t组数据,每组给定n,m,k。有n个格子,m种颜色,要求把每个格子涂上颜色且正好适用k种颜色且相邻的格子颜色不同,求一共有多少种方案,结果对1e9+7取余。思路: 参考大佬博客传送门 首先可以将m 与后面的讨论分离。从m 种颜色中取出k 种颜色涂色,取色部分有C(m, k) 种情况; 然后通过尝试可以发现,第一个有k种选择,第二个翻译 2017-10-23 19:29:28 · 220 阅读 · 0 评论 -
【DFS】UVA - 572 Oil Deposits
Problem Description 给你一个n行m列的矩阵,让你判断里面有多少块油田,相邻算是连通**代码:可以DFS,也可以BFS这次代码用的是DFS也算是给自己熟练下DFS#include<bits/stdc++.h>using namespace std;struct node{ int u, v;};char Map[105][105];int vis[105]翻译 2017-06-03 19:46:37 · 250 阅读 · 0 评论 -
【水题】UVA 512 Spreadsheet Tracking
Problem Description 给你r行c列的电子表格,给你n个操作,具体来说一共有五种操作: EX r1 c1 r2 c2交换单元格(r1,c1),(r2,c2). A x1 x2 …… xA 插入或删除A行或列(DC-删除列, DR-删除行, IC-插入列, IR-插入行, 1 <= A <= 10)。 接下来q个查询,给你原始的单元格(r0, c0)输出原始的,翻译 2017-05-09 17:35:28 · 348 阅读 · 0 评论 -
【栈 && 矩阵的知识】UVA 442 Matrix Chain Multiplication
Problem Description 给你n个矩阵,每个矩阵由一个字母命名,后面跟着矩阵的n行m列。 输入字符串要你求它相乘的次数,如果不能相乘输出error代码:A的列数不等于B的行数不能相乘,假定A是m*n矩阵, B是n*p矩阵,那么AB是m*p矩阵,乘法次数m*n*p..#include<bits/stdc++.h>using namespace std;struct nod翻译 2017-05-24 11:50:16 · 241 阅读 · 0 评论 -
UVa 10082 WERTYU
Problem Description 把手放在键盘上时,稍不注意就会往右错一位。这样,输入Q会变成输入 W,输入J会变成输入K等。输入一个错位后敲出的字符串(所有字母均大写),输出打字员本来想打出的句子。输入保证合法,既一定是错位之后 的字符串。例如输入中不会出现大写字母A。 Sample Input O S, GOMR YPFSU/Sample Output I翻译 2017-04-24 16:15:47 · 307 阅读 · 0 评论 -
UVa 1583 Digit Generator
Problem Description 如果x加上x的各个数字之和得到y,就说x是y的生成元。无解输出0. 例如,n = 216, 121, 2005时的解分别为198,0,1979.Sample Input 3 216 121 2005Sample Output 198 0 1979代码:#include<stdio.h>#include<s翻译 2017-04-24 16:27:11 · 272 阅读 · 0 评论 -
UVa 1584 Circular Sequence
Problem Description 长度为n的环状串有n种表示法,分别为从某个位置开始顺时针得到。在这些表示法中,字典序最小的称为“最小表示”。输入一个长度为n的**环状**DNA串(只包含A、C、G、T)的一种表示法,你的任务是输出该环状串最小表示。 Sample Input 2 CGAGTCAGCT CTCCSample Output AGCTCGAGTC翻译 2017-04-24 16:35:35 · 238 阅读 · 0 评论 -
UVa1586 Molar Mass
Problem Description 给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C,H,O,N, 原子量分别为12.01,1.008,16.00,14.01(单位:g/mol)。Sample Input 4 C C6H5OH NH2CH2COOH C12H22O11Sample Output 12.010 94.1翻译 2017-04-24 16:50:12 · 331 阅读 · 0 评论 -
UVa1225 DIgit Counting
Problem Description 把前n(n<=10000)个整数顺次写在一起:例如12: 123456789101112 数一数0-9各出现多少次Sample Input 2 3 13Sample Output 0 1 1 1 0 0 0 0 0 0 1 6 2 2 1 1 1 1 1 1代码:#include<stdio.h>#include<stri翻译 2017-04-24 16:56:47 · 234 阅读 · 0 评论 -
UVa 455 Periodic Strings
Problem Description 如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabc以3为周期Sample Input 1 HoHoHoSample Output 2代码:#include<stdio.h>#include<string.h>int next[100];void get_next(char s[])/翻译 2017-04-24 17:54:07 · 237 阅读 · 0 评论 -
UVa 227 Puzzle
Problem Description 有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A,B,L,R,分别表示把空格上,下,左,右,的相邻字母移到空格种。输入初始网格和指令序列(以数字0结束),输入指令执行完毕后的网格。如该有非法指令,应输出“This puzzle has no final configuration.”。Sample Input T翻译 2017-04-24 20:03:01 · 389 阅读 · 0 评论 -
UVa 232 Crossword Answers
Problem Description 输入一个r行c列(1<=r, c<=10)的网格,黑格用“*”表示,每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出了网格边界),则称这个白格是一个起始格。 首先把所有起始格按照从上到下、从左到右的顺序编号1,2,3……, 接下来要找出所有横向单词。这些单词必须从一个起始格开始,向右延伸到一个黑格翻译 2017-04-24 20:16:39 · 368 阅读 · 0 评论 -
UVa 202 Repeating Decimals 除法
Problem Description 输入整数a 和 b(0<=a<=3000, 1 <= b <= 3000),输出a/b的循环小数表示以及循环节长度。例如a = 5, b = 43, 小数表示为0.(116279069767441860465),循环节长度为21。Sample Input 76 25 5 43 1 397Sample Output 76/25 = 3翻译 2017-04-24 20:29:43 · 337 阅读 · 0 评论 -
UVa 11809 Floating-Point Numbers
Problem Description 给你A*10^B这样格式的数据,让你求它的尾码和阶码 m*2^e, m,e分别为二进制,m从0.1开始后面1的个数为尾码,e为阶码 m*2^e = A*10^B 想办法表示A,B所以就两边同时取对数 令t = log10(m) + elog10(2) = log10(A) + B; 如果1 <= A < 10 ; 0 < log10(A翻译 2017-04-24 20:51:23 · 288 阅读 · 0 评论 -
【二进制、字符串】UVA - 213 Message Decoding
Problem Description 编写一个解码程序 对数字串进行解码 输入第一行是一个解码code code从左到右每个字符分别对应0,00,01,10,000,001,011,100,101,110,0000,0001,…,1101,1110,00000,……. 长度为len的字符编码有2^n-1个 而且恰好以二进制方式从0到2^n-2递增 而且字符编翻译 2017-05-08 20:59:32 · 421 阅读 · 0 评论 -
【双向队列,单向队列,坑爹的题目】Uva 210 Concurrency Simulator
Problem Description 我的天,这个题目无法理解,只能强行跟着别人博客的代码理解题目了。先输入t组测试样例,每组结果之间有空行。每组测试样例输入n,t1,t2,t3,t4,t5,Q,分别表示有n个程序,五种情况需要对应的时间,每次最多运行那么多时间。(赋值)(打印)(lock)(unlock)(end)lock, unlock这两个是重点。这两个lock,unlock出现没有什么翻译 2017-05-16 21:42:50 · 728 阅读 · 0 评论 -
【栈】UVA - 514 Rails
Problem Description 输入一个n,无限组后面有n个数(直到n个数的第一个是0退出循环),让你判断1-n从A进去,能不能满足着n个数的顺序出去,能就Yes,否则No。代码:水题#include<bits/stdc++.h>using namespace std;int main(){ int n, i; int num[1010]; stack<i翻译 2017-05-28 15:51:12 · 309 阅读 · 0 评论 -
【数组模拟链表】UVA - 11988 Broken Keyboard
Problem Description 输入一行文本,如果遇到’[‘就会跳到最前面继续输入,如果遇到’]’就会跳到最后面继续输入代码:数组模拟链表的后面插入#include<cstdio>#include<cstring>using namespace std;char s[100005];//数据数组int next[100005];//指向数组int main(){ i翻译 2017-05-28 16:11:16 · 313 阅读 · 0 评论 -
【数组模拟链表(双向)】UVA - 12657 Boxes in a Line
Problem Description 给你n和m,分别对应1-n的编号,和m行操作,有四种情况1 X Y:X移动到Y的左边, 2 X Y: X移动到Y的右边, 3 X Y:交换位置, 4 反转整个编号。代码:#include<bits/stdc++.h>using namespace std;int lt[100055];//记录i点的左边下标int rt[100055];//记录i点翻译 2017-05-28 16:19:22 · 418 阅读 · 0 评论 -
【数组二叉树】UVA - 679 Dropping Balls
Problem Description 每行输入深度d和小球的数量num,一个小球一个小球的下落,经过小球数为偶数开关关闭,朝左边走,奇数开关打开,朝右边走,问你最后一个小球下落在下标多少#include<bits/stdc++.h>using namespace std;int main(){ int n, d, num; while(~scanf("%d", &n))翻译 2017-05-28 16:25:49 · 230 阅读 · 0 评论 -
【找规律】UVALive - 7045 Last Defence
Problem Description 已知S0, S1。Si = |si-1 - si-2| for i>=2。s[]集合有多少个不同的元素思路: 找规律,模拟演算过程。例如a = S0 = 10, b = s1 = 3; s2 = 7, s3 = 4, s4 = 3, s5 = 1。先看这里10 7 4 1分别是10 - 3t的到的结果,能减多少次10/3 = 3。这3代表10翻译 2017-10-23 14:59:03 · 263 阅读 · 0 评论