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; }