Last Defence (run time error)
Last Defence
时间限制:1000 ms | 内存限制:65535 KB
描述
Given two integers A and B. Sequence S is defined as follow:
• S0 = A
• S1 = B
• Si = |Si-1 – Si-2| for i ≥ 2
Count the number of distinct numbers in S .
输入
The first line of the input gives the number of test cases, T. T test cases follow. T is about 100000.
Each test case consists of one line – two space-separated integers A, B. (0 ≤ A, B ≤ 10^18).
输出
For each test case, output one line containing “Case #x: y”, where x is the test case number (starting from 1) and y is the number of distinct numbers in S .
样例输入
2
7 4
3 5
样例输出
Case #1: 6
Case #2: 5
来源
Yougth
我的思路:首先这道题run time error了。。任何两个数,进行题中的运算,得出是一组数,最后肯定是x, x,0,x,x,0,x,x,0……循环的,所以当遇到x,x,0时候就停止,然后把前面的数和x,0进行处理,计算一下一共有多少不同的数。。希望大家帮看一下,这个代码运行没有错误,结果也对。
#include<iostream> #include<algorithm> #include<stdio.h> #include<cmath> using namespace std; int a[10000000]; int main() { int T,i,j; int g=1; long long A,B; cin>>T; while(T--) { scanf("%lld%lld",&A,&B); a[0]=A; a[1]=B; i=2; while(1) { a[i]=fabs(a[i-1]-a[i-2]); a[i+1]=fabs(a[i]-a[i-1]); a[i+2]=fabs(a[i+1]-a[i]); if(a[i]==a[i+1]&&a[i+2]==0) { a[i+1]=0; break; } i++; } int n=i+2; sort(a,a+i+2); for(i=0;i<n-1;i++) { if(a[i]==a[i+1]) { for(j=i;j<n-1;j++) a[j]=a[j+1]; i--; n--; } } printf("Case #%d: %d\n",g,n); g=g+1; } return 0; }