传送门:https://cn.vjudge.net/problem/UVA-1588
#include <iostream> #include <string.h> using namespace std; int kick(char *s1,char *s2, int n, int m) { int i,j,t; i=j=t=0; while(i<n&&j<m) { if(s1[i]-'0'+s2[j]-'0'<=3) { i++; j++; } else { i=0; j=++t; } } return n+m-i; } int main() { char m[105],d[105]; int lm,ld,ans; while(cin>>m>>d) { lm=strlen(m); ld=strlen(d); ans=kick(m,d,lm,ld)<kick(d,m,ld,lm)?kick(m,d,lm,ld):kick(d,m,ld,lm); cout<<ans<<endl; } return 0; }
思路:
两者的高度加起来不超过3就满足条件继续执行,否则记录一个字符串的位置另一个重新开始,找到合适的为止,最后找出最小的就可以。