UVA -1588 Kickdown
2016-07-16 00:45
344 查看
先槽一下,本来选这题是看实验室rank中这道题的通过率挺高,然而小白就是小白,写起来十分痛苦,以后还是乖乖按顺序写吧。
题目大意:两个零件要拼装起来,齿必须对槽,不能齿对齿,但是槽可以对槽。
不过其他人都是这么理解的:第三个零件高3h,前两个零件的高度和不能大于3h。
解题思路:两个串,固定上方的串,移动下方的串,当下方所有的 2 对应的上方都不是 2 时,记录两串无重叠部分的长度;交换两个串,重复上述操作,再次记录交换后的长度;长度若不超过上方的串的长度则记为上方串的长度。对比两个长度,输出最小值。
话说我原来的做法是先算出 second 串有几个 2 ,把每个 2 对应的 first 串的部分都一一对比,非 2 就 record +1 ,然后看看record会不会等于 2 的总数,所以程序多很复杂,华丽地超时了,并且被学长吐槽“完全看不懂我的程序”。
嗯,其实遇到一个不满足条件的直接跳出来,遇到第一个满足条件的输出就行了。
题目大意:两个零件要拼装起来,齿必须对槽,不能齿对齿,但是槽可以对槽。
不过其他人都是这么理解的:第三个零件高3h,前两个零件的高度和不能大于3h。
解题思路:两个串,固定上方的串,移动下方的串,当下方所有的 2 对应的上方都不是 2 时,记录两串无重叠部分的长度;交换两个串,重复上述操作,再次记录交换后的长度;长度若不超过上方的串的长度则记为上方串的长度。对比两个长度,输出最小值。
#include<iostream> #include<cstdio> #include<string.h> using namespace std; int main () { int i, j ,res1, res2 ; bool flag ; char fi[200] , se[200] , cha[200]; while ( scanf( "%s", fi) != EOF) { scanf( "%s", se); res1 = 0 ; res2 = 0 ; while ( res2 == 0) { for( i = 0 ; i < strlen(fi) ; i++ ) { flag = 1; for ( j = 0 ; j < strlen(se) && (j + i) < strlen( fi) ; j++ ) if( se[j] == '2' && fi[i+j] == '2' ) {flag = 0;break;} if(flag) break; } if ( res1 == 0 ) res1 = max( strlen(se) + i , strlen(fi) ); else res2 = max( strlen(se) + i , strlen(fi) ); strcpy ( cha , fi); strcpy ( fi , se ); strcpy ( se , cha); } cout << min( res1 , res2 ) <<endl; } return 0; }
话说我原来的做法是先算出 second 串有几个 2 ,把每个 2 对应的 first 串的部分都一一对比,非 2 就 record +1 ,然后看看record会不会等于 2 的总数,所以程序多很复杂,华丽地超时了,并且被学长吐槽“完全看不懂我的程序”。
嗯,其实遇到一个不满足条件的直接跳出来,遇到第一个满足条件的输出就行了。
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- ACMer博客瀑布流分析
- ACM程序设计大赛题目分类
- 2015年acm国内排名
- 计算字符串最后一个单词长度
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 矩阵的乘法操作
- 1.10055 - Hashmat the brave warrior
- 2.10071 - Back to High School Physics
- 3.458 - The Decoder
- 4.694 - The Collatz Sequence
- 6.494 - Kindergarten Counting Game
- 7.490 - Rotating Sentences
- 8.414 - Machined Surfaces
- 9.488 - Triangle Wave
- A.457 - Linear Cellular Automata