得益于数据量小,用比较丑的暴力姿势也过了。。。
找规律会发现
qn=qn−1+qn−2
,我是把每个高位的1分解成两个低位的1,多分解几次,暴力水过。
这里的暴力姿势我感觉比较好:
http://blog.csdn.net/mengxiang000000/article/details/53538476
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100100;
char str1[MAXN];
int len1;
char str2[MAXN];
int len2;
int main()
{
char ch;
char *s1 = str1;
char* s2 = str2;
while((ch = getchar()) != '\n')
{
if(ch == '0' && len1 == 0) continue;
str1[len1++] = ch;
}
str1[len1] = '\0';
while((ch = getchar()) != '\n')
{
if(ch == '0' && len2 == 0) continue;
str2[len2++] = ch;
}
str2[len2] = '\0';
for(int k = 0; k < 10; ++k)
{
for(int i = len1-1; i > 1; --i)
{
if(str1[i] == '0' && str1[i-1] == '0' && str1[i-2] == '1')
{
str1[i] = str1[i-1] = '1';
str1[i-2] = '0';
}
}
for(int i = len2-1; i > 1; --i)
{
if(str2[i] == '0' && str2[i-1] == '0' && str2[i-2] == '1')
{
str2[i] = str2[i-1] = '1';
str2[i-2] = '0';
}
}
}
while((*s1) == '0')
{
len1--;
++s1;
}
while((*s2) == '0')
{
len2--;
++s2;
}
if(len1 > len2)
{
printf(">\n");
return 0;
}
else if(len1 < len2)
{
printf("<\n");
return 0;
}
int res = strcmp(s1,s2);
if(res == 0) printf("=\n");
else if(res > 0) printf(">\n");
else printf("<\n");
return 0;
}