来源:codeforces B. Weird Subtraction Process
You have two variables a and b. Consider the following sequence of actions performed with these variables:
- If a?=?0 or b?=?0, end the process. Otherwise, go to step 2;
- If a?≥?2·b, then set the value of a to a?-?2·b, and repeat step 1. Otherwise, go to step 3;
- If b?≥?2·a, then set the value of b to b?-?2·a, and repeat step 1. Otherwise, end the process.
Initially the values of a and b are positive integers, and so the process will be finite.
You have to determine the values of a and b after the process ends.
Input
The only line of the input contains two integers n and m (1?≤?n,?m?≤?1018). n is the initial value of variable a, and m is the initial value of variable b.
Output
Print two integers — the values of a and b after the end of the process.
Examples
input
Copy
12 5
output
0 1
input
Copy
31 12
output
7 12
思路:
模拟题目给出的步骤,逐步求解,超时,后来想到预处理ab,预处理不彻底,被hack
总结:
不能鲁莽的模拟,一定要考虑到特殊情况,千万不能因为简单而大意。这种题目应该分析出公式
#include <bits/stdc++.h> using namespace std; long long a,b; int main() { cin>>a>>b; while(a!=0&&b!=0) if(a>=2*b) { a%=(2*b); } else if(b>=2*a) { b%=(2*a); } else break; cout<<a<<" "<<b<<endl; return 0; }