#305 (div.2) C. Mike and Frog
2015-05-28 20:17
323 查看
1.题目描述:点击打开链接
2.解题思路:本题是一道模拟题,虽然看上去像数学,但实际上只需要模拟一下这个过程就好了。首先,我们先让h1变为a1,设需要k1步才可以,如果h2经过k1步也变为a2,那么直接输出答案。否则,我们接下来找h1变化的循环节cycle,即每经过一个cycle,就可以再到达a1。那么我们看h2需要几个cycle才可以从当前位置(即第k1步时候的位置)到达a2,假设只需要k2步,那么最终的答案就是k2*cycle+k1。
本题的细节比较多,详细过程还需要见注释部分好好理解。
3.代码:
2.解题思路:本题是一道模拟题,虽然看上去像数学,但实际上只需要模拟一下这个过程就好了。首先,我们先让h1变为a1,设需要k1步才可以,如果h2经过k1步也变为a2,那么直接输出答案。否则,我们接下来找h1变化的循环节cycle,即每经过一个cycle,就可以再到达a1。那么我们看h2需要几个cycle才可以从当前位置(即第k1步时候的位置)到达a2,假设只需要k2步,那么最终的答案就是k2*cycle+k1。
本题的细节比较多,详细过程还需要见注释部分好好理解。
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<functional> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> P; typedef pair<long long,long long> PL; #define me(s) memset(s,0,sizeof(s)) #define For(i,n) for(int i=0;i<(n);i++) #define pb push_back #define sz size #define clr clear int m; ll h1,a1,h2,a2,x1,y11,x2,y2; ll next(ll a,ll x,ll y,ll mod) { return (a*x+y)%mod; } int main() { // freopen("t.txt","r",stdin); while(cin>>m) { cin>>h1>>a1>>x1>>y11; cin>>h2>>a2>>x2>>y2; ll k1=0;//假设h1经过k1步可以到达a1 while(h1!=a1&&k1<m+10)//设置最多只能走m+10步,否则认为不可能到达 { h1=next(h1,x1,y11,m); h2=next(h2,x2,y2,m);//同时测试h2,看能否在k1步时候也到达 k1++; } if(h1!=a1) { puts("-1");continue; } if(h1==a1&&h2==a2)//直接输出结果 { cout<<k1<<endl; continue; } int cycle=1;//循环节 h1=next(h1,x1,y11,m);//先走一步 int x=x2,y=y2;//x,y表示的是一次走cycle步的系数 while(h1!=a1&&cycle<m+10) { h1=next(h1,x1,y11,m); x=(x*x2)%m;//可以很方便的通过多项式迭代得到 y=(y*x2+y2)%m; cycle++; } if(h1!=a1) { puts("-1"); continue; } ll k2=0;//假设可以经过k2个cycle到达a2 while(h2!=a2&&k2<m+10) { h2=next(h2,x,y,m); k2++; } if(h2!=a2) { puts("-1"); continue; } else//最终结果是k2*cycle+k1 { cout<<k2*cycle+k1<<endl; } } return 0; }
相关文章推荐
- CIDR
- 如何计算IP地址的网络号和主机号?
- WIN7局域网文件共享设置方法
- 魅族 mx2拍照无反应 Camera.takePicture 未回调PictureCallback jpeg
- jsp+js实现二级级联
- [Emacs学习笔记]选中文字
- C++子类访问父类protected成员
- java复习(三)
- linux之sed用法 (文本处理工具)
- POJ 2492 A Bug's Life (并查集)
- Android调用camera错误setParameters failed深层解析
- 扁平化管理
- ubifs & mtd
- Android NFC 开发实例
- Android 开关按钮切换,类似于iphone 效果,view实现
- BigInteger 类 和 BigDecimal 类
- hadoop2.2.0 pom.xml
- hadoop2.2.0 pom.xml
- hadoop2.2.0 pom.xml
- hadoop2.2.0 pom.xml