UVA -1588 Kickdown

先槽一下,本来选这题是看实验室rank中这道题的通过率挺高,然而小白就是小白,写起来十分痛苦,以后还是乖乖按顺序写吧。

题目大意:两个零件要拼装起来,齿必须对槽,不能齿对齿,但是槽可以对槽。
不过其他人都是这么理解的:第三个零件高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 的总数,所以程序多很复杂,华丽地超时了,并且被学长吐槽“完全看不懂我的程序”。
嗯,其实遇到一个不满足条件的直接跳出来,遇到第一个满足条件的输出就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值