您的位置:首页 > 其它

uva1588 - Kickdown

2015-09-05 14:37 267 查看
链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4463

code

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

int getMinLen(char* n1 ,char* n2, char* n2_)
{

int len_n1 = strlen(n1),len_n2 = strlen(n2);

for(int i = 0 ; i < len_n2; i ++)
{

n2_[i] = '3' - n2[i] + '0';
}

int i = 0 , j = 0, start= 1 ;
while(i < len_n1 && j < len_n2)
{

if(n1[i] <= n2_[j])
{	i++;	j++;}
else
{
i = start;
j = 0;
start ++;
}

}

int minLen = 0;
if( j == len_n2)
minLen = len_n1;
else if( j == 0 && i == len_n1)
minLen = len_n1 + len_n2;
else if(j != 0 &&  i == len_n1)
minLen = len_n1 + len_n2 -  j;

return minLen;
}

int main()
{

char n1[120],n2[120],n2_[120];
while(scanf("%s",n1) != EOF)
{
scanf("%s",n2);

int len_n1 = strlen(n1),len_n2 = strlen(n2);

int rightMinLen = getMinLen(n1,n2,n2_);

int leftMinLen = getMinLen(n2,n1,n2_);

printf("%d\n", rightMinLen<leftMinLen ? rightMinLen : leftMinLen);
}

return 0;
}
注意事项:

1)一开始只考虑下面一块纸片,上面一块纸片往右边移动,导致WA。修改程序编程左边也移动,然后比较左右移动获取的最小值然后输出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: