码迷,mamicode.com
首页 > 其他好文 > 详细

Uva1588(模拟)

时间:2018-04-24 20:14:51      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:二次   space   problem   printf   lse   偏移量   循环   模拟   php   

Time limit: 3.000 seconds

题目连接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=830&page=show_problem&problem=4463

题意:

有上下两条长条,长条上有很多槽,其中2代表凸槽,1代表凹槽,求他们组合在一起后的的最小的长度。

分析:

其实关键就是要找到长条凹凸槽配对的个数。配对可以转化为字符串中每个槽的值相加<=3,一旦出现一个位置不配对,则给下面长条一个偏移量,让上面的长条重新从起始位置0与下面长条偏移位置开始比较。完成上述步骤得到一个容量长度为count1=m+n-peidui再将上述两个长条调换位置,再进行比较,再得到一个容量长度为count2 = m+n-peidui,count1与count2中的最小值即为容量的长度。

代码如下

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main(){
    char low[110],up[110];      //定义两个长条
    while((scanf("%s%s",low,up))!=EOF){
        int peidui;         //槽的配对个数 
        int i,j,pianyi;     //循环变量与偏移量
        int m = strlen(low);
        int n = strlen(up);
        
        i = j = pianyi = peidui = 0;
        for(;i < m&&j < n;){
            if(low[i] + up[j] - 96 <= 3){       //若配对,则继续比较 
                i++,j++,peidui++;
            }else{
                peidui = 0;         //一个槽不配对则配对归0 
                pianyi++;
                i = pianyi;     //下面的长条从偏移位置开始比较 
                j = 0;      //上面的长条重新从起始位置比较 
            }
        }
        
        int len1 = m + n - peidui;
        i = j = pianyi = peidui = 0;
        
        //调换长条进行第二次比较
        for(;i < n&&j < m;){
            if(up[i] + low[j] - 96 <= 3){
                i++,j++,peidui++;
            }else{
                peidui = 0;
                pianyi++;
                i = pianyi;     
                j = 0;
            }
        }
        
        int len2 = m + n - peidui;
        printf("%d\n",len1<len2?len1:len2); 
    }
    return 0;
}

Uva1588(模拟)

标签:二次   space   problem   printf   lse   偏移量   循环   模拟   php   

原文地址:https://www.cnblogs.com/Western-Trail/p/8932883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!