记录编号 222864 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOI 2013]矩阵游戏 最终得分 100
用户昵称 GravatarSatoshi 是否通过 通过
代码语言 C++ 运行时间 0.165 s
提交时间 2016-02-05 12:14:47 内存使用 2.22 MiB
显示代码纯文本
  1. #include <fstream>
  2. #define N 1000000
  3. using namespace std;
  4. typedef long long ll;
  5. ifstream in("matrixb.in");
  6. ofstream out("matrixb.out");
  7. ll mod=1e9+7;
  8. ll a,b,c,d,m=0,n=0;
  9. char s1[N+10],s2[N+10];
  10. ll phi;
  11. ll ans=0;
  12. class vector
  13. {
  14. public:
  15. ll x,y;
  16. void make(ll aaa,ll bbb)
  17. {
  18. x=aaa;
  19. y=bbb;
  20. }
  21. }t1,t2,t3;
  22. vector operator *(vector a,vector b)
  23. {
  24. vector c;
  25. c.x=(a.x*b.x)%mod;
  26. c.y=(a.x*b.y+a.y)%mod;
  27. return c;
  28. }
  29. vector pow(vector o,ll k)
  30. {
  31. vector c;
  32. k--;
  33. c=o;
  34. while(k)
  35. {
  36. if(k&1)c=c*o;
  37. o=o*o;
  38. k=k>>1;
  39. }
  40. return c;
  41. }
  42. void init(char *s,ll &sum)
  43. {
  44. int i;
  45. for(i=0;s[i];i++)
  46. {
  47. sum=(sum*10+s[i]-'0')%phi;
  48. }
  49. }
  50. void read()
  51. {
  52. in>>s1>>s2>>a>>b>>c>>d;
  53. if(a==1&&c==1)phi=mod;
  54. else phi=mod-1;
  55. init(s1,n);init(s2,m);
  56. t1.make(a,b);
  57. t2.make(c,d);
  58. //out<<n<<' '<<m<<' '<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
  59. }
  60. void work()
  61. {
  62. t1=pow(t1,m-1);
  63. t3=t2*t1;
  64. t3=pow(t3,n-1);
  65. t1=t1*t3;
  66. ans=(t1.x+t1.y)%mod;
  67. out<<ans<<endl;
  68. }
  69. int main()
  70. {
  71. read();
  72. work();
  73. return 0;
  74. }