UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#204843#3630. 数列操作lsr1008896ms11656kbC++112.0kb2024-06-10 09:56:502024-06-10 12:02:59

answer

#include <bits/stdc++.h>
using namespace std;

#define QwQ3301AwA return 0
#define ll long long

const int N = 105;
const int M = 1e6 + 5;
const int mod = 1e9 + 7;
void add(int &x, int y) {
    x += y;
    if (x >= mod) x -= mod;
}
int n, m, q;
struct Mat {
    int w[N][N];
    Mat () {
        memset(w, 0, sizeof(w));
    }
    Mat operator * (const Mat rhs) const {
        Mat ans;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                for (int k = 0; k < n; k++) {
                    add(ans.w[i][j], 1ll * w[i][k] * rhs.w[k][j] % mod);
                }
            }
        }
        return ans;
    }
};

bool op[M];
int x[M], y[M];
Mat g, f;
Mat pw[30];

Mat mul(Mat f, Mat g) {
    Mat ans;
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            add(ans.w[0][j], 1ll * f.w[0][k] * g.w[k][j] % mod);
        }
    }
    return ans;
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m >> q;
    for (int i = 1; i <= m; i++) {
        string s;
        cin >> s >> x[i] >> y[i];
        x[i]--, y[i]--;
        if (s[0] == 's') op[i] = 0;
        else op[i] = 1; 
    }
    for (int i = 0; i < n; i++) {
        g.w[i][i] = 1;
        for (int j = 1; j <= m; j++) {
            if (op[j] == 0) swap(g.w[i][x[j]], g.w[i][y[j]]);
            else add(g.w[i][x[j]], g.w[i][y[j]]);
        }
    }
    // for (int i = 0; i < n; i++) {
    //     for (int j = 0; j < n; j++) {
    //         cout << g.w[i][j] << ' ';
    //     }
    //     cout << '\n';
    // }
    pw[0] = g;
    for (int i = 1; i < 30; i++) pw[i] = pw[i - 1] * pw[i - 1];
    while (q--) {
        for (int i = 0; i < n; i++) cin >> f.w[0][i];
        int k;
        cin >> k;
        for (int i = 0; i < 30; i++) {
            if ((k >> i) & 1) f = mul(f, pw[i]);
        }
        for (int i = 0; i < n; i++) cout << f.w[0][i] << ' ';
        cout << '\n';
    }
    QwQ3301AwA;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 5ms
memory: 2872kb

input:

30 30 30
add 11 7
add 8 26
swap 19 6
add 21 13
swap 28 16
swap 11 18
add 26 14
swap 14 8
swap 11 24
...

output:

550095038 92418381 507176887 906163279 313105934 570651164 285313314 517015518 438637289 250415289 6...

result:

ok 30 lines

Test #2:

score: 10
Accepted
time: 4ms
memory: 2872kb

input:

30 30 30
swap 5 5
swap 21 3
add 17 1
swap 11 23
add 9 29
add 23 1
add 23 3
swap 23 21
add 3 21
swap ...

output:

287688536 772489543 549962788 868362009 689988914 853729914 20144151 714205769 402286427 810161567 4...

result:

ok 30 lines

Test #3:

score: 10
Accepted
time: 115ms
memory: 2868kb

input:

100 100 100
swap 6 80
swap 88 53
swap 55 59
swap 45 81
swap 4 56
swap 69 85
swap 71 93
swap 97 58
sw...

output:

749336717 24709802 840318246 634954155 259909581 258599455 649551653 296218244 72544480 896050158 31...

result:

ok 100 lines

Test #4:

score: 10
Accepted
time: 120ms
memory: 2872kb

input:

100 100 100
swap 50 26
swap 42 30
swap 43 14
swap 88 24
swap 33 75
swap 84 39
swap 28 46
swap 11 33
...

output:

772590331 74462880 377435932 687433410 392067538 166828233 215084806 318363631 161238800 327773751 3...

result:

ok 100 lines

Test #5:

score: 10
Accepted
time: 1325ms
memory: 11648kb

input:

100 1000000 1
add 61 62
swap 33 93
swap 86 6
swap 72 16
add 11 94
swap 39 47
swap 41 49
swap 19 6
ad...

output:

346253799 771126444 971288221 851217895 505808154 221609458 688027614 70353229 288594725 941298229 4...

result:

ok single line: '346253799 771126444 971288221 ...4 52682545 701646733 382173771 '

Test #6:

score: 10
Accepted
time: 1617ms
memory: 11652kb

input:

100 1000000 1
add 5 7
swap 87 70
add 74 61
swap 12 64
add 44 9
add 54 6
swap 86 97
swap 28 85
swap 5...

output:

450803790 667372094 419301609 389943582 752771140 804124829 585325182 72383423 966194784 233403679 3...

result:

ok single line: '450803790 667372094 419301609 ... 713392549 328208981 322568321 '

Test #7:

score: 10
Accepted
time: 1272ms
memory: 11648kb

input:

100 1000000 1
add 46 61
add 45 43
swap 62 17
swap 52 8
swap 74 33
swap 76 56
add 35 38
swap 37 69
ad...

output:

125149011 756465812 161024297 688771858 867501504 650402763 595197506 873222233 587955871 81643619 3...

result:

ok single line: '125149011 756465812 161024297 ...2 91971529 757776826 634397245 '

Test #8:

score: 10
Accepted
time: 1468ms
memory: 11652kb

input:

100 1000000 100
swap 91 58
swap 100 84
swap 15 59
swap 50 98
add 5 45
add 24 15
swap 37 2
add 2 55
s...

output:

977736656 530446270 797215529 884989997 700839061 290600516 76651241 425687312 559634624 35286388 41...

result:

ok 100 lines

Test #9:

score: 10
Accepted
time: 1443ms
memory: 11656kb

input:

100 1000000 100
swap 43 7
add 49 61
add 3 18
swap 90 50
add 34 72
swap 47 73
swap 86 51
swap 12 38
a...

output:

883102546 725800572 971218181 922364443 269815718 329364304 159331295 428667708 3431691 503434529 15...

result:

ok 100 lines

Test #10:

score: 10
Accepted
time: 1527ms
memory: 11652kb

input:

100 1000000 100
swap 84 65
add 3 34
swap 91 74
swap 33 94
swap 80 83
swap 69 27
swap 27 99
swap 21 1...

output:

147983174 81716446 161911525 667483078 170580251 709287671 728191563 271802648 733606284 754329389 8...

result:

ok 100 lines

Extra Test:

score: 0
Extra Test Passed