zoukankan      html  css  js  c++  java
  • Gym

    题意:

    一直TLE我也是醉了,,不爽!

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <fstream>
     4 #include <algorithm>
     5 #include <cmath>
     6 #include <deque>
     7 #include <vector>
     8 #include <queue>
     9 #include <string>
    10 #include <cstring>
    11 #include <map>
    12 #include <stack>
    13 #include <set>
    14 #define LL long long
    15 #define MAXN 100005
    16 #define INF 0x3f3f3f3f
    17 #define MAXN 100005
    18 #define eps 1e-8
    19 using namespace std;
    20 LL ax, ay, bx, by, cx, cy, kx, ky, nx, ny, x, p;
    21 struct Martix
    22 {
    23     LL m[10][10];
    24     Martix()
    25     {
    26         memset(m, 0, sizeof(m));
    27     }
    28 };
    29 void m_quick_power(Martix &a, Martix &b)
    30 {
    31     Martix c;
    32     for(int i = 1; i <= 5; i++){
    33         for(int j = 1; j <= 5; j++){
    34             for(int k = 1; k <= 5; k++){
    35                 c.m[i][j] = (c.m[i][j] + a.m[i][k] * b.m[k][j]) % p;
    36             }
    37         }
    38     }
    39     a = c;
    40 }
    41 LL work(int s, LL n)
    42 {
    43     Martix u, v;
    44     u.m[1][1] = ax, u.m[1][2] = bx, u.m[1][3] = cx, u.m[1][4] = s;
    45     v.m[2][1] = v.m[3][1] = v.m[4][2] = v.m[1][3] = v.m[3][4] = 1, v.m[1][2] = v.m[2][3] = kx;
    46     while(n){
    47         if(n & 1){
    48             m_quick_power(u, v);
    49         }
    50         m_quick_power(v, v);
    51         n >>= 1;
    52     }
    53     return u.m[1][1];
    54 }
    55 int main()
    56 {
    57 #ifndef ONLINE_JUDGE
    58     freopen("in.txt", "r", stdin);
    59     //freopen("out.txt", "w", stdout);
    60 #endif // OPEN_FILE
    61     int T;
    62     scanf("%d", &T);
    63     while(T--){
    64         scanf("%I64d", &p);
    65         scanf("%I64d%I64d%I64d%I64d%I64d", &ax, &bx, &cx, &kx, &nx);
    66         scanf("%I64d%I64d%I64d%I64d%I64d", &ay, &by, &cy, &ky, &ny);
    67         scanf("%I64d", &x);
    68         nx--;
    69         ny--;
    70         int cnt = 0;
    71         int j = 0;
    72         for(int i = 1; i <= p; i++){
    73             if(work(i, nx) == x){
    74                 cnt++;
    75                 j = i;
    76             }
    77         }
    78         if(cnt != 1){
    79             printf("UNKNOWN
    ");
    80             continue;
    81         }
    82         ax = ay, bx = by, cx = cy, kx = ky;
    83         LL ans = work(j, ny) % p;
    84         printf("%I64d
    ", ans);
    85     }
    86 }
  • 相关阅读:
    Bash's Big Day
    树链剖分求lca
    Contest1814
    启发式合并
    2019 Multi-University Training Contest 10
    图论题
    vijos-记数问题
    2018届研究生招生预推免(THU,HIT)经历分享
    数细胞-swust oj
    Bone Collector-HDU
  • 原文地址:https://www.cnblogs.com/macinchang/p/4723152.html
Copyright © 2011-2022 走看看