记录编号 |
222864 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
题目名称 |
[NOI 2013]矩阵游戏 |
最终得分 |
100 |
用户昵称 |
Satoshi |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.165 s |
提交时间 |
2016-02-05 12:14:47 |
内存使用 |
2.22 MiB |
显示代码纯文本
- #include <fstream>
- #define N 1000000
- using namespace std;
- typedef long long ll;
- ifstream in("matrixb.in");
- ofstream out("matrixb.out");
- ll mod=1e9+7;
- ll a,b,c,d,m=0,n=0;
- char s1[N+10],s2[N+10];
- ll phi;
- ll ans=0;
- class vector
- {
- public:
- ll x,y;
- void make(ll aaa,ll bbb)
- {
- x=aaa;
- y=bbb;
- }
- }t1,t2,t3;
- vector operator *(vector a,vector b)
- {
- vector c;
- c.x=(a.x*b.x)%mod;
- c.y=(a.x*b.y+a.y)%mod;
- return c;
- }
- vector pow(vector o,ll k)
- {
- vector c;
- k--;
- c=o;
- while(k)
- {
- if(k&1)c=c*o;
- o=o*o;
- k=k>>1;
- }
- return c;
- }
- void init(char *s,ll &sum)
- {
- int i;
- for(i=0;s[i];i++)
- {
- sum=(sum*10+s[i]-'0')%phi;
- }
- }
- void read()
- {
- in>>s1>>s2>>a>>b>>c>>d;
- if(a==1&&c==1)phi=mod;
- else phi=mod-1;
- init(s1,n);init(s2,m);
- t1.make(a,b);
- t2.make(c,d);
- //out<<n<<' '<<m<<' '<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
- }
- void work()
- {
-
- t1=pow(t1,m-1);
- t3=t2*t1;
- t3=pow(t3,n-1);
- t1=t1*t3;
- ans=(t1.x+t1.y)%mod;
- out<<ans<<endl;
- }
- int main()
- {
- read();
- work();
- return 0;
- }