CF 317A(Perfect Pair-广义Fib序列p,q=1性质2&加法增长极)
2013-06-18 12:46
399 查看
A. Perfect Pair
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Let us call a pair of integer numbers m-perfect, if at least one number in the pair is greater
than or equal to m. Thus, the pairs (3, 3) and (0, 2) are 2-perfect while the pair (-1, 1) is not.
Two integers x, y are written on the blackboard.
It is allowed to erase one of them and replace it with the sum of the numbers, (x + y).
What is the minimum number of such operations one has to perform in order to make the given pair of integers m-perfect?
Input
Single line of the input contains three integers x, y and m ( - 1018 ≤ x, y, m ≤ 1018).
Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preffered to use the cin, cout streams
or the %I64dspecifier.
Output
Print the minimum number of operations or "-1" (without quotes), if it is impossible to transform the given pair to the m-perfect
one.
Sample test(s)
input
output
input
output
input
output
Note
In the first sample the following sequence of operations is suitable: (1, 2)
(3,
2)
(5,
2).
In the second sample: (-1, 4)
(3,
4)
(7,
4)
(11,
4)
(15,
4).
Finally, in the third sample x, y cannot be made
positive, hence there is no proper sequence of operations.
首先,这题尽管我用了Sx的公式(可二分),但是可以暴力(加法增长极很大)
只需要把负数弄好就行.
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Let us call a pair of integer numbers m-perfect, if at least one number in the pair is greater
than or equal to m. Thus, the pairs (3, 3) and (0, 2) are 2-perfect while the pair (-1, 1) is not.
Two integers x, y are written on the blackboard.
It is allowed to erase one of them and replace it with the sum of the numbers, (x + y).
What is the minimum number of such operations one has to perform in order to make the given pair of integers m-perfect?
Input
Single line of the input contains three integers x, y and m ( - 1018 ≤ x, y, m ≤ 1018).
Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preffered to use the cin, cout streams
or the %I64dspecifier.
Output
Print the minimum number of operations or "-1" (without quotes), if it is impossible to transform the given pair to the m-perfect
one.
Sample test(s)
input
1 2 5
output
2
input
-1 4 15
output
4
input
0 -1 5
output
-1
Note
In the first sample the following sequence of operations is suitable: (1, 2)
(3,
2)
(5,
2).
In the second sample: (-1, 4)
(3,
4)
(7,
4)
(11,
4)
(15,
4).
Finally, in the third sample x, y cannot be made
positive, hence there is no proper sequence of operations.
首先,这题尽管我用了Sx的公式(可二分),但是可以暴力(加法增长极很大)
只需要把负数弄好就行.
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #include<functional> #include<cmath> #include<cctype> using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #define Rep(i,n) for(int i=0;i<n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #define ForD(i,n) for(int i=n;i;i--) #define Forp(x) for(int p=pre[x];p;p=next[p]) #define RepD(i,n) for(int i=n;i>=0;i--) #define MEM(a) memset(a,0,sizeof(a)) #define MEMI(a) memset(a,127,sizeof(a)) #define MEMi(a) memset(a,128,sizeof(a)) #define INF (1e18) #define MAXN (1000000) long long x,y,m; long long f[MAXN]={0,1,1}; int n=0; long long work() { if (max(x,y)>=m) return 0; long long j=0; if (x==0&&y==0) return -1; if (x<0&&y<0) return -1; bool b=0; while (max(x,y)<m) { if (x+y<=min(x,y)) return -1; if (x>y) swap(x,y); if (x>0&&y>0) { int k=1; while (f[k]*x+f[k+1]*y<m) k++; j+=k; return j; } else if (!b&&x<0&&y>0) { long long k=-x/y; if (m<0) k=(m-x)/y; j+=k; x+=k*y; b=1; } else { j++; x+=y; } } return j; } int main() { // freopen(".in","r",stdin); // freopen(".out","w",stdout); for(n=3;f[n-1]<INF;n++) f =f[n-1]+f[n-2]; n--; // For(i,n) cout<<f[i]<<' '; while (cin>>x>>y>>m) cout<<work()<<endl; return 0; }
相关文章推荐
- Codeforces Round #188 (Div. 1) / 317A Perfect Pair(数学&优化)
- CF 346 B vector<pair> s[100]
- cf Perfect Pair
- CF 316E3(Summer Homework-广意Fib数列在p,q=1时的性质-Fib线段树)
- make 2>&1 | tee log.txt之小析
- 关于shell命令的定向输出 2>&1
- leetcode -- Subsets I &II-- 重点,求0,1序列
- AR--未来技术提前探索<2>[自己做的第一个AR]
- http://poj.org/problem?id=1274&&The Perfect Stall
- shell 之 2>&1 和 tee
- Shell标准输出、标准错误 >/dev/null 2>&1
- javaweb-day06-2&3 (Servlet - Response - 输出随机图片、请求重定向、web工程的URL地址写法、getOutputStream和getWriter互斥)
- AngularJS小示例<2>
- 第17周 项目4 - 日期结构体<2>
- Fib 性质 Gcd(f[n],f[m]) = f(gcd(n,m))
- 欧拉函数有关式ϕ(n)/(n-1)值递减序列性质
- Android 编译命令 make j8 2>&1 | tee build.log 解释
- bash中的2>&1需要摆放在命令的最后面
- 分析shell命令中 >/dev/null 2>&1的语法实现原理
- 并行计算之路<2>——CUDA与纹理映射