UVA1588(Kickdown)

我的思路是A右与B左对齐,然后一路滑过去,寻找其中的最小值。然而WA。。

#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <stack>
#include <cctype>
using namespace std;

#define mem(a,b) memset(a,b,sizeof(a))
#define pf printf
#define sf scanf
#define spf sprintf
#define debug printf("!\n")
#define INF 10000
#define MAXN 5010
#define MAX(a,b) a>b?a:b
#define blank pf("\n")
#define LL long long

char a[110],b[110];

int main()
{
     while(~sf("%s",a))
     {
          int i,j,aa,bb;
          sf("%s",b);
          int al = strlen(a);
          int bl = strlen(b);
          int m = al+bl;
          int len = MAX(al,bl);
          for(i=-bl+1;i<al;i++)
          {
               int k = 0,tmp;
               for(j = 0;j<bl;j++)
               {
                    if(i+j<0 || i+j>=al)
                    {
                         aa = 0;
                         bb = b[j]-'0';
                    }
                    else
                    {
                         aa = a[i+j]-'0';
                         bb = b[j]-'0';
                    }
                    if(aa+bb>3) break;
                    if(i+j<0 || i+j>=al) k++;
               }
               if(j==bl)
               {
                    pf("k%d\n",k);
                    if(k) tmp = len+k-1;
                    else tmp = len;
                    pf("tmp%d\n",tmp);

                    if(m>tmp) m = tmp;
               }
          }

          pf("%d\n",m);
     }
}
/*
2112112112
2212112
12121212
21212121
2211221122
21212
2221
12111
*/

 

看了一下别人的思路,是左端对齐,两个分别滑动,然后遇到一个匹配就break,求其中较小那个

http://www.cnblogs.com/wuyuewoniu/p/4345571.html

效率上这个方法肯定比我的好,就是不知道我的WA在哪,先摆在这

你可能感兴趣的:(UVA1588(Kickdown))