算法竞赛入门经典第五章
NowAndForever
这个作者很懒,什么都没留下…
展开
-
UVA - 579 Clock Hands
点击打开链接求时针与分针的夹角。因为时针每小时走30度,每分钟走5度,分针每分钟走6度。相减即可。#include#includeint main(){ int a,b; double sum; while(~scanf("%d:%d",&a,&b)&&(a+b)) { sum=fabs(a*30+0.5*b-6*b);原创 2015-01-03 16:20:46 · 439 阅读 · 0 评论 -
UVA - 10025 The ? 1 ? 2 ? ... ? n = k problem
点击打开链接给定k,问由特定的式子得到k的最小值的n,因为式子 ? 1 ? 2 ? ... ? n = k 中问号可以变成加号,或者减号,如果全部为加号那么此时需要的n是最小的,但是要是中途有一个加号变成了减号,结果都是减少了2的偶数倍,所以只要找出 1+2+3+..+n>=k的n,然后判断n-k是否是偶数,不是n继续增大,直到找到为止。#includeint main(){原创 2014-12-29 17:10:26 · 562 阅读 · 0 评论 -
UVA - 414 Machined Surfaces(题意不好懂)
懂了题意就是水题。给你n行数每行都有25个字符,第一个和最后一个都是‘X',中间可能包含空格,问每次与左边(或者右边)移动,直到中间没有空格为止,问此时还有多少空格。我们直接考虑移动完之后的状态,肯定是空格少的那一行最先移动完,那么只要统计出原先总的空格数减去空格最少的那一行乘×n就是目前剩下的字符了。#include#includeint main(){ int n,原创 2014-12-25 19:31:01 · 649 阅读 · 0 评论 -
UVA - 10161 Ant on a Chessboard(数学规律)
打开链接给你一个棋盘 输入n,找出n在第几行第几列。可以发现对角线的数是有规律增长的,那么只要找到当前输入的n在对角线的第几个数上,就可以得出行数和列数。#include#includeusing namespace std;typedef long long ll;int main(){ //freopen("a.txt","r",stdin); ll n原创 2014-12-24 17:23:32 · 372 阅读 · 0 评论 -
UVA - 621 Secret Research(水)
开始 没看懂最后一句话,后来 发现不用去考虑不能匹配的情况,那么就是一个水题了。#include#includechar s[10000];int main(){ int n,i,j; scanf("%d",&n); getchar(); for(i=0;i<n;i++) { scanf("%s",s); int原创 2014-12-24 20:25:46 · 560 阅读 · 0 评论 -
UVA - 10071 Back to High School Physics(高中物理)
点击打开链接一个粒子具有初速度和恒定的加速度,给定t 时刻粒子的速度,求2×t 时间粒子的位移。结论:匀加速直线运动的平均速度等于初速度与末速度和的一半。 位移 = v平×t。因为 x=v0*t+1/2*a*t*t v=v0+at; 得出 平均速度 v平= x/t =v0+1/2*a*t =(v+v0)/2;那么 2×t 时刻 粒子位移 x= (v0+原创 2014-12-25 11:13:10 · 587 阅读 · 0 评论 -
UVA - 591 Box of Bricks (水题)
给你n堆高度不一的砖块,问你把这n堆砖块变成相同高度,需要最少移动的砖块数。开始题目没仔细看,以为照样是求变成相同高度的最小移动次数,这题只要求出平均值,然后累加有多少大于这个均值的即可,因为大于平均值的必定会移动去填满那些小于平均值的堆。#include#includechar s[10000];int main(){ int n,i,j,k=1,a[200],sum,a原创 2014-12-24 20:58:06 · 431 阅读 · 0 评论 -
UVA - 113 Power of Cryptography (大数幂+二分)
打开链接给定n和p,找出 k使得 k^n==p 。1我们可以二分k,用高精度表示出k^n 然后跟p比较。#include#include#includeconst int maxn = 1000000000;struct bign{ int len; int f[1500]; bign() {memset(f,0,sizeof(f)); len=0;原创 2014-12-24 16:32:35 · 601 阅读 · 0 评论 -
UVA - 123 Searching Quickly
题目链接这道题就是给定 一系列ignore词(全部是小写),以::结尾 然后 输入一系列文本,每行不包括ignore词的作为关键词,(与ignore词比较不区分大小写) ,然后排序输出。每一行中可能出现几个关键词,那就以出现顺序先后输出,如果有几行包括了同一个关键词,就以输入时顺序输出,其余的按照字典序排序输出。输出的时候时候除了关键词大写外,其余都要小写。这道题做的时候有点长,不过幸好原创 2014-12-23 09:39:08 · 571 阅读 · 0 评论 -
UVA - 465 Overflow
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18654给你一个一个式子,由两个操作数和一个运算符组成,运算符只包括‘+’ 和 ‘*' 判断操作数和结果是否大于int表示的最大值,分别按格式输出。简单题,注意字符串长度即可,然后用两个long long类型的去保存读入的数的大小,最后判断是否大于即可。#inclu原创 2014-12-06 17:00:55 · 453 阅读 · 0 评论 -
UVA - 10878 Decode the tape
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25148题意是给你一个打印机,输出打印机要打印的内容。其实就是一个找规律的题目,注意到'o' 只有7个有效的位置,那么如果'o'表示为1,空格表示为0的话,第一行是1000001 等于65 恰好是’A'的ascii码,所以就是把每一行对应的字符输出即可。#incl原创 2014-12-05 21:33:43 · 445 阅读 · 0 评论 -
求字符串的最小周期
如果一个字符串以某个长度为k的字符串重复多次得到,我们说该串以k为周期,例如:abcabcabcabc 以3为周期,(注意它也以6和12为周期),输入一个长度不超过80的字符串,输出最小周期。思路是从小到大枚举各个周期,符合条件就跳出。#include #include int main(){ //freopen("a.txt","r",stdin); char s原创 2014-12-05 11:32:36 · 1344 阅读 · 0 评论 -
UVA - 10112 Myacm Triangles
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19099给定一些点,求构成三角形最大面积,并且这个三角形不能不能包含其他点(在边上也不行)。因为数据范围很小,所以直接枚举就好,并且还把面积公式告诉了我们,判断点在三角形内的方法是,这个点与其他顶点的面积之和是否等于这个三角形的面积。#include#includ原创 2014-12-19 17:56:12 · 530 阅读 · 0 评论 -
UVA - 748 Exponentiation
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25197给定一个浮点数a,求a的n次方的精确值,并且忽略前导0和后面多余的0.用一个结构体保存浮点数a去掉小数点后的值,同时记录小数的位数,然后用大数乘法,来代替a的n次幂,求出精确值。#include#includestruct node{ int原创 2014-12-14 20:04:30 · 540 阅读 · 0 评论 -
UVA - 10494 If We Were a Child Again
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20386高精度除以低精度,可以直接模拟除法,取模也是一样。注意被除数为0的情况,这题数据不是很大。#include#includechar s[1000],num[1000];int main(){ char c; int n,i,j;原创 2014-12-14 15:58:43 · 377 阅读 · 0 评论 -
UVA - 375 Inscribed Circles and Isosceles Triangles
点击打开链接求一系列内切圆的周长之和,第一个内切圆是最大的,然后第二个是在一个圆上面跟第一个圆相切,并且与等腰三角形两条边相切,这样一直下去直到半径r小于一个特定的值。 #include#includeint main(){ double b, h, l, sum, temp, r ; double Pl = acos(-1.0); int T;原创 2015-01-03 16:14:54 · 501 阅读 · 0 评论 -
UVA - 10970 Big Chocolate
点击打开链接给你一块 N*M的巧克力 问你至少需要几次操作才能 把巧克力全部切成一个单元一块的。首先横着切n-1次,得到n条,然后每条都需要切m-1次 总共需要 n-1 + n*(m-1) 次。#includeint main(){ int n,m; while(~scanf("%d%d",&n,&m)) { printf("%d\n",原创 2015-01-02 20:44:31 · 432 阅读 · 0 评论 -
UVA - 10014 Simple calculations
点击打开链接2*a1 = a0 + a2 - 2*c12*a2 = a1 + a3 - 2*c22*a3 = a2 + a4 -2*c3...2*an = an-1 + an+1 - 2*cn将上述n个式子依次累加加 并且保留 第一个式子得:2*a1 = a0 + a2 -2*c1a1+a2=a0+a3-2*(c1+c2)a1+a3=a0+a4-2*(c1+c原创 2015-01-02 21:08:13 · 429 阅读 · 0 评论 -
UVA - 10177 (2/3/4)-D Sqr/Rects/Cubes/Boxes?
点击打开链接给定 边长 问在二维三维四维平面构成的图形中,正方形(正方体)长方形(长方体)的数量,注意正方形(体)这里看做不等同与长方形(体)。正方形的数量很容易找出规律来:边长为3: 2维正方形数量 1×1+2×2+3×3 3维 1*1*1+2*2*2+3*3*3 ...长方形数量等于 总数减去正方形数量,总数 等于 s*s s*s*s s*s*s原创 2015-01-02 19:24:37 · 510 阅读 · 0 评论 -
UVA - 10719 Quotient Polynomial
点击打开链接由一个多项式确定另一个多项式,就是一个找规律题。假设: p(x)=a*x^4+b*x^3+c*x^2+d*x+f q(x)=a1*x^3+b1*x^2+c1*x+d 因为 p(x) = (x-1) * q(x) 所以 a1=a b1-a1*k=b c1-k*b1=c d1-k*c1=d 就可以把对应系数求出来。#inclu原创 2014-12-31 16:04:46 · 627 阅读 · 0 评论 -
UVA - 11044 Searching for Nessy
点击打开链接就是求矩阵最少能由多少个3×3的子矩阵填满,并且大矩阵的边界不用考虑。除3就行了。#includeint main(){ //freopen("a.txt","r",stdin); int t,n,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m);原创 2014-12-31 11:17:24 · 411 阅读 · 0 评论 -
UVA - 340 Master-Mind Hints
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18657一道很简单的题 开始不知道自己错在哪了!就是先给定一个目标序列,然后每次输出一个新的序列都要输出相同列数相同的个数,不同列数相同的个数,注意每个数只能用一次,并且优先满足列数相同的。想的太复杂了!!#include#includeconst int maxn原创 2014-12-15 20:51:46 · 357 阅读 · 0 评论 -
UVA - 10499 The Land of Justice
点击打开链接这道题的意思 是一一个实心球,然后把它沿轴均分成n份,问后来表面积比原来的增加了百分之几。初始表面积4×pi×r×r 分成2份后,表面积增加了2×pi*r*r,所以是50%,分成三份表面积增加了3×pi×r*r. 所以是75%,n份增加了 25×n%。用double 防止溢出。#includeint main(){ double n; whil原创 2014-12-30 21:10:58 · 411 阅读 · 0 评论 -
UVA - 10790 How Many Points of Intersection?
点击打开链接两条平行直线,第一条直线有a个点,第二条直线有b个点,问这两条直线与多少个交点。首先让上面有a个点,下面的点一个个看。下面加入第一个点,此时没有交点。加入第二个点,最左边的线的交点数为 a-1 ,第二条线的交点为 a-2 .... 最后一条为0.加入第三个点,最左边的线交点数为 2*(a-1) ,第二条线的交点数为2*(a-2) ,..... 最后一条为0..原创 2014-12-30 19:59:34 · 402 阅读 · 0 评论 -
UVA - 573 The Snail
点击打开链接就是问你蜗牛经过多少天爬上井上或者滑倒井底,因为每天能往上爬的距离知道,并且每天下滑的距离也知道,直接判断就好,注意每天上爬的距离是衰减的,减到0就不能在减下去了,只能是0.#includeint main(){ //freopen("a.txt","r",stdin); double h,u,d,f; while(~scanf("%lf%lf%lf原创 2014-12-31 10:46:59 · 424 阅读 · 0 评论 -
UVA - 846 Steps
点击打开链接简单题,问你由x到y的最小步数,最初和最后一个数都是1,并且当前数要比前面那个数大1,或者等于,或者小于1 ,那么每次ze原创 2014-12-30 19:50:57 · 369 阅读 · 0 评论 -
UVA - 10115 Automatic Editing
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19220第五章字符串最后一个题,幸运1A:题目意思给定一组字符串,和与之对应的字符串,然后给定一行字符,如果在这一行中找到给定的字符串,就用对应的字符串代替找到的字符串,然后在重新找,找不到就找下一个,直到全部处理完!!用string就可以了,利用find函数不断查原创 2014-12-05 11:05:29 · 397 阅读 · 0 评论 -
UVA - 10194 Football (aka Soccer)
UVA - 10194 Football (aka Soccer) 点击打开链接从这道题中收获蛮多,首先又一次知道自己的代码风格一点都不好,乱七八糟的,还有也就是抓不住题目重点,导致不停WA。不过知道了还有strcasecmp这个函数,不区分大小写排序,并且从别人代码中学习风格,让程序清晰很多。#include#include#includeusing namespace原创 2014-12-21 22:56:42 · 448 阅读 · 0 评论 -
UVA - 568 Just the Facts
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19089求n的阶乘从后往前的非0位。我是直接用万进位法,把n的阶乘求出来,再去找那个非0的数字。#include#includeint f[10000];int main(){ //freopen("a.txt","r",stdin); in原创 2014-12-18 16:01:02 · 396 阅读 · 0 评论 -
UVA - 550 Multiplying by Rotation
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19088给定一个数的进制k,和第一个乘数的最低位n,和第二个乘数m,求原数的最小长度。乘法规律:xxxx7 × 4= 7xxxxx. 首先n是原数的最低位,那么n*m%k就是原数的倒数第二位,也就是后一个数的最后一位,那么依次类推,可以把后一个数全部推出来,直到乘数原创 2014-12-18 14:58:14 · 406 阅读 · 0 评论 -
UVA - 575 Skew Binary
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19086水题,就是把一个斜二进制数转化成十进制数。#include#include#includeusing namespace std;int main(){ //freopen("a.txt","r",stdin); char s[100]原创 2014-12-18 10:40:20 · 521 阅读 · 0 评论 -
UVA - 10361 Automatic Poetry
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25129水题,直接按照题意搞就行。输出第一行是把, 第二行是把 ... 用两个后面的内容不变去代替。#include #include #include #include #include #include #include #include #in原创 2014-12-02 19:19:21 · 373 阅读 · 0 评论 -
UVA - 156 Ananagrams
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19294跟第五章书上例题 字母重排 基本一样。给你一系列单词,问是否存在一个单词忽略大小写,任意重排与其他所有的单词都不一样,存在就输出,并且按照字典序输出。输入完单词之后,可以先把所有单词按字典序排序,以便于输出,然后在把每个单词排序,与其他单词比较,这样可以消去原创 2014-12-17 21:01:30 · 410 阅读 · 0 评论 -
UVA - 120 Stacks of Flapjacks
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18284以下翻译转载自:http://www.cnblogs.com/devymex/archive/2010/08/15/1799844.htmlBackground背景Stacks and Queues are often considered th原创 2014-12-17 19:47:28 · 547 阅读 · 0 评论 -
UVA - 10010 Where's Waldorf?
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18656也是一道基础题,让你在一个N×M的矩阵中查找一个给定的字符串,可以分八个方向查找,输出找到的字符串首字母在矩阵中的位置,至少保证矩阵中存在一个要查找的字符串,如果有多个输出最左上的位置即可。开始 用dfs感觉不太好写,后来就直接用循环搞了,直接枚举八个方向去判断原创 2014-12-02 16:09:01 · 410 阅读 · 0 评论 -
UVA - 299 Train Swapping
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19501就是问你把一个序列变成从小到大有序的需要交换多少次,只能交换相邻的两个。那只要置一个循环如果有交换就交换下去,没有就跳出即可。#include#include#include#includeusing namespace std;int main()原创 2014-12-16 19:44:39 · 331 阅读 · 0 评论 -
UVA - 152 Tree's a Crowd
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18650开始题意一直没看懂,百度了才知道是什么意思!题目大意:给你一组三维空间中的点,每个点到其它点都有个距离,其中有个最小距离,如果这个最小距离小于10,就将对应的距离值的点个数加1,最后输出距离值为0,1,2,3,4,5,6,7,8,9的点的个数。再看题目一原创 2014-12-16 11:19:28 · 389 阅读 · 0 评论 -
UVA - 10420 List of Conquests
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19650水题,统计首单词出现了多少次,并且按照字典序排序。#include#include#includeusing namespace std;struct node{ char s[100]; int num; node() {me原创 2014-12-16 09:37:41 · 403 阅读 · 0 评论 -
UVA - 10474 Where is the Marble?
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19833水题,q个询问,每次输入一个数然后n个数(从小到大排序)中查找第一次出现的位置,有就输出位置,没有就输出no found。#include#include#includeusing namespace std;int a[10010];int main原创 2014-12-16 09:53:56 · 676 阅读 · 0 评论 -
UVA - 10110 Light, more light
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19087看懂题目就好做了,题目意思是有n个灯泡编号1-n,有一个人总共从起点走n次,第i次按下被i整除灯泡开关,问最后编号为n的开关是亮还是暗,初始灯泡全部为暗。因为n很大,不能直接模拟,但是可以发现只要n是完全平方数,就只存在一个单独因子,这样操作完之后就必然为亮,所原创 2014-12-18 13:18:05 · 373 阅读 · 0 评论