uva1588kickdown

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93800#problem/K

题意:给出2个长度分别为n1,n2且每列高度只有2或1的长条,在高度为3的长条中切出这2条,求最短需要多长的长条。

思路:将长的一条固定,把短的一条移动,对应的高度若有大于3的移动一下,移动后继续从开始检查。左右移动分开写。

#include<iostream>
#include<string.h>
using namespace std;

int main()
{
    char a[100],b[100];
    memset(a,'0',sizeof(a));
    memset(b,'0',sizeof(b));
    while(cin>>a>>b)
    {
        int l1=strlen(a);
        int l2=strlen(b);
        char(&s1)[100]=a;
        char(&s2)[100]=b;
        if(l1<l2)
        {
            char(&s1)[100]=b;
            char(&s2)[100]=a;
        }
        int k=0;
        for(int i=0;i<l2;)
        {
            if(((s1[i+k]-'0')+(s2[i]-'0'))>3)
            {
                k++;
                i=0;
            }
            else
            {
                i++;
            }
        }
        int lengt1;
        if(k>(l1-l2))
        {
            lengt1=k+l2;
        }
        else
        {
            lengt1=l1;
        }
        int g=0;
        for(int i=0;i<l2;)
        {
            if(((s1[i]-'0')+(s2[i+g]-'0'))>3)
            {
                g++;
                i=0;
            }
            else
            {
                i++;
            }
        }
        int lengt2=l1+g;
        if(lengt2<lengt1)
        {
            cout<<lengt2<<endl;
        }
        else
        {
            cout<<lengt1<<endl;
        }
    }
    return 0;
}

 

posted @ 2016-05-07 10:54  哲贤  阅读(303)  评论(0编辑  收藏  举报