
UVA
Ziiyan
这个作者很懒,什么都没留下…
展开
-
UVA - 10785 The Mad Numerologist
题目大意:每个字母有一个权值,给定一个长度,构造名字。要求权值最小,奇数位原音,偶数位辅音,且按字母序输出。每个原音最多用 5 次,辅音 21 次。解题思路:按权值顺序存到数组,排序后组合输出。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>using namespa原创 2016-07-10 22:36:56 · 181 阅读 · 0 评论 -
UVA - 120 Stacks of Flapjacks
题目大意:给出一个字符串,可以将第 i 个之前的头尾翻转,要求最后结果从小到大,输出翻转过程。解题思路:通过将最大值翻转,翻到第一位,然后翻转最后一位,这样可以将最大的放到最后一位。找出当前未排序的当中的最大值,判断是否位于正确的位置,不是的话将它翻转到第一位(如果已经是第一位就不用),然后翻转到正确位置即可。puts 输出就会 WA 不知道为什么。#include<iostream> #incl原创 2016-07-10 22:37:14 · 192 阅读 · 0 评论 -
UVA - 575 Skew Binary
题目大意:根据题目给出的特殊进制转化。解题思路:第 K 位上的数乘以(2 ^ k - 1),所有相加。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>using namespace std;char str[100];int main() { while(原创 2016-07-10 22:37:37 · 196 阅读 · 0 评论 -
UVA - 10110 Light, more light
题目大意:给 n 盏灯,走 n 趟,第 i 趟只能改变能够整除 i 的灯的状态,问 n 趟后第 n 盏灯是否是亮的。解题思路:只要考虑第 n 盏灯的改变就行,被改变的次数就是它的因子的个数,因为一开始灯是关闭的,所以一共要改变奇数次才能最终亮起来,即题意为:求一个数的因子是否是奇数个。因子都是成对出现的,既然要奇数个说明有一对因子相等,只算一次,所以化为判断这个数是否是完全平方数。int 太小会 W原创 2016-07-10 22:38:00 · 204 阅读 · 0 评论 -
UVA - 755 487--3279
题目大意:输入的每行都是一个电话号码,字母可以化为数字,多余的 - 可以删去,输出出现 > 1 次的号码以及出现的次数。解题思路:读入,化为电话,排序,循环与后一个号码比较,出现多于一次的就输出。TLE 了好久,两个 for 循环对比效率太低qwq#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#i原创 2016-07-11 16:36:22 · 258 阅读 · 0 评论 -
UVA - 550 Multiplying by Rotation
题目大意:给出三个数 a,b,c,a 是进制,b 是第一个乘数的最后一位,c 是第二个乘数。求 c 要乘以多少位数后,积的第一位是 b (a 进制下)。解题思路:百度…强行理解,还是找规律吧= =#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>using namesp原创 2016-07-11 16:37:54 · 222 阅读 · 0 评论 -
UVA - 568 Just the Facts
题目大意:求阶乘的最后一位非零数字。解题思路:一开始想保留最后一位非零数字往下乘,发现因为进位后来会出错。总之想办法降低数据大小,因为要抛弃末尾的 0,即因子中含一对 2 和 5 (2×5=10)可以相互抵消,显然 2 比 5 多,最后乘上多出的个数的 2 就行。#include<iostream> #include<cstdio>#include<string.h>#include<stdl原创 2016-07-11 16:38:27 · 189 阅读 · 0 评论 -
UVA - 442 Matrix Chain Multiplication
题目大意:给出 n 个 矩阵名 行 列,然后给一些式子,求每个式子需要经过多少次计算(乘和加),括号内先算。解题思路:首先要对矩阵乘法有一些了解,数学渣表示百度了很久。 A(r*c)、B(r*c)两个矩阵能否进行乘法运算的充要条件是是否满足 A.c == B.r,如果满足,则会得到矩阵C(A.r*B.c),这次运算进行的乘法的次数是 A.r*A.c*B.c。 知道这个之后就简单了,创建一个矩阵类原创 2016-07-23 09:04:00 · 248 阅读 · 0 评论 -
UVA - 11111 Generalized Matrioshkas
题目大意:俄罗斯套娃,负数在前正数在后,表示该尺寸的娃娃,中间包含的数字是该娃娃里包含的小娃娃,要保证里面的娃娃总尺寸不大于外一层,问所给的数据是否正确。解题思路:定义一个能储存尺寸和能容纳大小的结构体,创建这种类型的栈,负数入栈,正数时,若还能包含,则出栈并且减去相应尺寸,最后栈空则表示正确。#include<iostream>#include<cstdio>#include<cstdlib>原创 2016-07-23 09:04:17 · 265 阅读 · 0 评论 -
UVA - 11234 Expressions
题目大意:一个表达式,可以用栈来处理,同时可以用队列来处理。现在告诉你用栈处理的表达式顺序,求其用队列表示的顺序。几种操作数为小写字母,操作符为大写字母。解题思路:采用栈来模拟,则为树的后序遍历,而用队列表示的是其层次遍历的逆序输出。所以根据后序遍历建树,再层次遍历该树,逆序输出。即遇到小写字母就建立一个只有根节点的树,并将该地址入栈。遇到大写字母,就建立一个根节点为该大写字母,然后从栈中取出两个地原创 2016-07-23 09:05:06 · 243 阅读 · 0 评论 -
UVA - 202 Repeating Decimals
题目大意:求循环小数,循环节用()括住,并输出循环节长度。解题思路:a/b 时,b 不变,a 取余数循环除 b,当 a 出现相同数值时,小数开始循环,所以有一个数组用来判断被除数是否出现过。模拟除法过程,储存商,当余数重复,停止运算。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cma原创 2016-07-23 19:44:24 · 264 阅读 · 0 评论 -
UVA - 350 Pseudo-Random Numbers
题目大意:给出 Z,I,M,L,根据 L=(Z*L+I)modM 计算每一轮 L,输出循环的 L 的个数,注意循环不一定从所给的 L 开始。解题思路:用一个数组记录 L 是否出现过,未出现循环长度 +1 并标记出现,直至重复出现时跳出,输出长度。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#in原创 2016-07-12 18:15:04 · 242 阅读 · 0 评论 -
UVA - 10010 Where's Waldorf?
题目大意:给出几行几列的字母和几个单词,从字母列表里找单词,单词要位于一条直线上,可以从八个方向求找,输出第一个单词在表中的位置,无视大小写。解题思路:输入时全部化为小写字母,找到第一个相同字母的位置先记录,然后按方向检索,成功就输出。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include原创 2016-07-12 18:15:28 · 189 阅读 · 0 评论 -
UVA - 10879 Code Refactoring
题目大意:找出一个数的任意两对因子。不一定要与样例相同解题思路:枚举能整除的输出两对,注意格式,难得的水题……#include<iostream> #include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>using namespace std;int count = 0;int main() { int原创 2016-07-12 18:16:01 · 229 阅读 · 0 评论 -
UVA - 408 Uniform Generator
题目大意:给出 step 和 mod,根据 seed(x+1)=[seed(x)+step]%10mod,问产生的随机数是否均匀分布于 0 到 mod-1。解题思路:产生随机数存入数组,排序比较。 可以通过判断 gcd(step, mod) 是否等于 1,然而并不能够理解。#include<iostream> #include<cstdio>#include<string.h>#includ原创 2016-07-11 16:39:03 · 323 阅读 · 0 评论 -
UVA - 579 Clock Hands
题目大意:给一个时间,计算该时刻时针与分针的夹角,0 ~ 180。解题思路:各指针每格表示的度数计算好,相减再控制范围即可。#include<iostream> #include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>using namespace std;int main() { int H, M;原创 2016-07-13 23:04:39 · 237 阅读 · 0 评论 -
UVA - 375 Inscribed Circles and Isosceles Triangles
题目大意:在等要三角形底边的高上堆圆,输出所有半径不小于 0.000001 的圆周长总和。解题思路:三角形相似。 一般三角形内接圆半径 r=2S/(a+b+c),其中S是三角形面积,a、b、c 是三角形三边。 注意先判断半径再计算面积。#include<iostream> #include<cstdio>#include<cstring>#include<cstdlib>#include原创 2016-07-13 23:05:14 · 279 阅读 · 0 评论 -
UVA - 10061 How many zero's and how many digits ?
题目大意:给出一个十进制数 N 和一个进制 B,求 N! 在 B 进制下末尾有几个 0 和 N! 的位数。解题思路:根据十进制求尾随零的办法,求质因数 2 和 5的对数即是尾随 0 的个数,求 N! 的质因数,算一下这些质因数相乘能凑出几个 B,即末尾有几个 0。 位数据百度用斯特林公式,对所有 i 取 logB 的和取整后 +1,注意加上 1e-9 调节精度。#include<iostream>原创 2016-07-13 23:05:34 · 415 阅读 · 0 评论 -
UVA - 10387 Billiard
题目大意:球在桌中心与水平线成一个角度发射,最后返回出发点,给出时间、碰撞水平边和垂直边的次数,求发射角度和速度。解题思路:根据反射的对称性,水平方向总路程为 a*m,竖直方向 b*n,速度根据勾股定理求得总路程除以时间得到,弧度 atan(b*n/a*m) 再 * 180 / PI 化为角度。#include<iostream> #include<cstdio>#include<string.原创 2016-07-14 15:37:35 · 215 阅读 · 0 评论 -
UVA - 10112 Myacm Triangles
题目大意:给出一些点,求构成三角形面积最大且三角形内不含别的点的三个点。解题思路:比较面积后判断三角形内部是否有点,若内部有点则该点与三角形的三点中任意两点构成的三角形的面积相加正好等于这个三角形。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>using names原创 2016-07-14 15:38:00 · 259 阅读 · 0 评论 -
UVA - 113 Power of Cryptography
题目大意:k^n=p,给出 n 和 p 求 k解题思路:k = p ^ (1/n) 二分法+高精度——Poj 2109 Power of Cryptography(double型开n次方的方法通过的原因)by 猿先生#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>u原创 2016-07-14 15:38:33 · 232 阅读 · 0 评论 -
UVA - 10161 Ant on a Chessboard
题目大意:给一个棋盘,输入n,找出n在第几行第几列。 解题思路:找规律。先求最近的完全平方数,得到相应坐标,求 n 与该平方数的差得到 n 的坐标。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>using namespace std;int main() {原创 2016-07-14 15:39:02 · 204 阅读 · 0 评论 -
UVA - 10050 Hartals
题目大意:给 T 个样例,连续 N 天,从周日开始,P 个队伍,每个队伍罢工的日子是所给队伍数字的倍数,多个队伍在同一天罢工只算一次,且周五周六不算,问罢工天数。解题思路:模拟,把罢工天数置为 1,每周五周六置为 0,最后扫一遍。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath原创 2016-07-26 19:59:48 · 241 阅读 · 0 评论 -
UVA - 540 Team Queue
题目大意:t 个队伍排队,若队伍中已经有自己队伍的人,则排到这个人的后面,若没有,排到整个队列的后面。解题思路:模拟,映射把每个人和队伍号对应起来,定义两个队列,一个排队,另一个记录某个队伍已排人数。本来是自己写数组模拟的,TLE,看了小紫学 STL。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#in原创 2016-07-26 20:00:17 · 295 阅读 · 0 评论 -
UVA - 101 The Blocks Problem
题目大意:操作积木。有 0~n-1 个积木,初始状态是并排横放。有四种操作:move a onto b,将 a、b 上的方块放回原位然后将 a 放在 b 上;move a over b,将 a 上的方块放回原味然后将 a 放在 b 所在位置的最顶上;pile a onto b,将 b 上的方块放回原味然后将 a 及其上所有的方块放到 b 上;pile a over b,将 a 及其上所有方块放到 b原创 2016-07-26 20:00:39 · 247 阅读 · 0 评论 -
UVA - 253 Cube painting
题目大意:给两个正方体涂色,问经过旋转是否能变为一模一样。解题思路:检测两个正方体的三对面颜色是否对应相等,相等令其为 0,有三对之后输出 TRUE。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>using namespace std;char s[15];ch原创 2016-07-15 21:08:56 · 233 阅读 · 0 评论 -
UVA - 621 Secret Research
题目大意:根据题目输出对应字符,S 代表任意串。解题思路:根据规则特征判断输出。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>using namespace std;char s[1000];int main() { int T; scanf("原创 2016-07-15 21:09:21 · 215 阅读 · 0 评论 -
UVA - 591 Box of Bricks
题目大意:移动方块使所有列一样高,一次一个,求移动次数。解题思路:求平均数然后计算每列大于平均数的个数。#include<iostream> #include<cstdio>#include<string.h>#include<stdlib.h>#include<cmath>using namespace std;int n[100];int count = 0;int main()原创 2016-07-15 21:09:42 · 232 阅读 · 0 评论 -
UVA - 573 The Snail
题目大意:给出 H 井高,U 上爬距离,D 下滑距离,F 减少百分数。第一天爬 U,第二天比前一天减少 F%,每晚下滑 D,问成功(总爬行距离大于 H)或失败(距离小于 0)在第几天。解题思路:模拟每天上爬和下滑,记录天数,每次距离变化后就判断,及时退出。第一天的模拟也要放在模拟过程循环内,因为放在 while 外面 WA 了好几次。#include<iostream> #include<cstd原创 2016-07-15 21:10:04 · 197 阅读 · 0 评论 -
UVA - 10025 The ? 1 ? 2 ? ... ? n = k problem
题目大意:输入 k,使得? 1 ? 2 ? … ? n = k,其中 ? 为+ 或 -,求 n。解题思路:找规律 n 可能的k n / 2 1 -1、1 0 2 -3、-1、1、3 1 3 -6、-4、-2、0、2、4、6 1 4 -10、-8、-6、-4、-2、0、2、4、6、8、10 2 5 -15、-13、-11、-9、-7、-原创 2016-07-16 15:45:32 · 206 阅读 · 0 评论 -
UVA - 846 Steps
题目大意:数轴上从 x 到 y,第一步为 1 最后一步也为 1,且相邻两步之差的绝对值不大于 1,求走的步数。解题思路:假设相邻之差都为 1,从 1、2、3…n,再从 n 到 1,最大步数 n 可能要走两次。先求 x、y 距离 dis ,枚举 n,求得 2 * n 步时能走的最长的距离 sum,k = sum - dis 即是多余的距离,当 k >= n 时, 说明多了一整个 n,所以最大步数只要走原创 2016-07-16 15:46:08 · 239 阅读 · 0 评论 -
UVA - 10499 The Land of Justice
题目大意:求切了 n 刀后增加的表面积是原来的百分之多少。解题思路:第一刀无法切开,第二刀多了四个半圆面,之后每刀多两个半圆面。 原始面积:4 * PI * r * r 一个半圆面:PI * r * r / 2 每刀增加两个半圆面即 1 / 4 化为百分数 *100 即 *25,精度问题直接 *25#include<iostream> #include<cstdio>#include<st原创 2016-07-16 15:46:26 · 247 阅读 · 0 评论 -
UVA - 10790 How Many Points of Intersection?
题目大意:两条平行线上分别有 a 和 b 个点,每个点与另外一条线上的点都要相连,求交点个数,两线相交就算一个点,不存在三线交于一点的情况。解题思路:固定第一条线上的 a 个点不动,b 每加 1,加的点的个数是 (1+2+3+…+a-1) * b,b 从一个开始加,总加的次数为 1+2+3+…+b-1,即总点数为 (1+2+3+…+a-1) * (1+2+3+…+b-1)#include<iostr原创 2016-07-16 15:46:50 · 244 阅读 · 0 评论 -
UVA - 424 Integer Inquiry
题目大意:大整数相加解题思路:读入 char 类型字符串,倒序储存于 int 类型的数组中,相加大于 10 进位,可能比原来大一位,倒序输出。#include<iostream> #include<cstdio>#include<string.h>using namespace std;int str[1000][1000];char s[1000];int ans[1000];int原创 2016-07-06 15:58:21 · 254 阅读 · 0 评论 -
UVA - 10106 Product
题目大意:大整数乘法解题思路:char 读入,倒序存于 int 数组,创建 map 二维数组用于储存竖乘法的中间值,注意每行是错开一位数的,最后相加再倒序输出即可。进制要注意,和加法只会进 1 是不同的,还有乘 0 的时候答案为 0#include<iostream> #include<cstdio>#include<string.h>using namespace std;int ans[原创 2016-07-06 15:58:55 · 219 阅读 · 0 评论 -
UVA - 1585 Score
题目大意:输入一个由 O 和 X 组成的串,统计得分。如果 O 连续出现,得分为连续出现的个数,X 为 0 分。如 OXOOX 的得分为 1+0+1+2+0=4。 解题思路:记录 O 出现个数并相加,出现 X 清零。 #include <iostream> #include <string.h> using namespace std; int main() {原创 2016-07-02 23:45:12 · 289 阅读 · 0 评论 -
UVA - 232 Crossword Answers
题目大意:输入黑白网格,白格都有字母。如果一个白格的左边或上方是黑格或边界,则这个白格是起始格。将起始格从第一行开始,从左到右进行编号。出横向和纵向单词,单词以起始格开始,碰到黑格或边界结束。 解题思路:用二维数组 map 记录网格,再用一个二维数组 num 数组记录起始格,遍历判断是否为起始格,是则输出编号,并从 map 对应位置开始输出单词。 注意编号宽度为 3,两个样例之间有一个空行。#i原创 2016-07-02 23:48:07 · 264 阅读 · 0 评论 -
UVA - 1225 Digit Counting
题目大意:记录从 1~n 的整数中 0~9 各出现多少次。 解题思路:用二维数组制表,后一个数中各数出现的次数加上前一个数的,输出时直接读取。#include <iostream>#include <string.h>using namespace std;int a[10005][15];int main() { memset (a, 0, sizeof(a)); for原创 2016-07-02 23:47:04 · 256 阅读 · 0 评论 -
UVA - 455 Periodic Strings
题目大意:一个字符串可以由某个长度为 k 的字符串重复得到,求最小周期 k 。如 abcabcabc 的周期为 3。 解题思路:从周期 1 开始枚举,比较相邻两个周期是否对应相同,遍历结束输出。#include <iostream>#include <string.h>using namespace std;char a[100];int main() { int T; c原创 2016-07-02 23:47:33 · 324 阅读 · 0 评论 -
UVA - 227 Puzzle
题目大意:5×5 网格,有一个格子是空的,其他都是字母。一共四种指令:A,B,L,R,分别表示将空格上、下、左、右的字母移到空格中。输入网格和指令(以 0 结束),输出执行指令后的网格。解题思路:二维数组模拟网格,用一个 char 类型的变量一边读一边执行,读入 0 结束,注意标记非法跳出后实际上并未读入完全,剩余指令会影响下一次的网格。#include<iostream>#include<cst原创 2016-07-04 17:58:54 · 308 阅读 · 0 评论