Test instructions: Given two numbers, and then starting with the third, each number is the absolute value of the difference between the first two numbers, asking how many different elements are in the sequence.
Analysis: This is almost the same as the a%b-b, assuming that a > B has a A/b number between a A and a, and then calculates between the numbers until the end of the 0.
The code is as follows:
#pragma COMMENT (linker, "/stack:1024000000,1024000000") #include <cstdio> #include <string> #include < cstdlib> #include <cmath> #include <iostream> #include <cstring> #include <set> #include < queue> #include <algorithm> #include <vector> #include <map> #include <cctype> #include < cmath> #include <stack>//#include <unordered_map>//#include <tr1/unordered_map> #define Freopenr freopen ("In.txt", "R", stdin) #define FREOPENW freopen ("OUT.txt", "w", stdout) using namespace std;//using Namespace std:: tr1;typedef Long Long ll;typedef pair<int, int> p;const int inf = 0x3f3f3f3f;const double inf = 0x3 F3f3f3f3f3f;const LL LNF = 0x3f3f3f3f3f3f;const Double PI = ACOs ( -1.0); const double EPS = 1e-8;const int maxn = 10005;cons T LL mod = 10000000000007;const int N = 1e6 + 5;const int dr[] = {-1, 0, 1, 0, 1, 1,-1, -1};const int dc[] = {0, 1, 0, 1 , 1,-1, 1, -1};const char *hex[] = {"0000", "0001", "0010", "0011", "0100 "," 0101 "," 0110 "," 0111 "," $ "," 1001 "," 1010 "," 1011 "," 1100 "," 1101 "," 1110 "," 1111 "};inline ll gcd (ll A, ll b) { return b = = 0? A:GCD (b, a%b); }int N, m;const int mon[] = {0, 31, 29, 31, 30, 31, 0, +, +,, +, +, +, +, +, 31};const int monn[] N, H, H, C, h, 31};inline int Min (int a, int b) {return a < b? A:b;} inline int Max (int a, int b) {return a > b a:b;} inline ll Min (ll A, ll b) {return a < b a:b;} inline ll Max (ll A, ll b) {return a > b a:b;} inline bool Is_in (int r, int c) {return R >= 0 && r < n && C >= 0 && C < m;} int main () {int T; Cin >> T; LL m, N; for (int kase = 1; kase <= T; ++kase) {scanf ("%i64d%i64d", &n, &m); printf ("Case #%d:", Kase); if (!n &&!m) {printf ("1\n"); Continue } if (!n | |!m | | m = = N) {printf ("2\n"); Continue } LL ans = 1; if (M > N) swap (m, n); while (M! =0) {ans + = n/m; LL tmp = n m; n = m; m = tmp; } printf ("%i64d\n", ans); } return 0;}
Gym 100548K Last Defence (number theory)