結果
| 問題 |
No.426 往復漸化式
|
| コンテスト | |
| ユーザー |
ei1333333
|
| 提出日時 | 2016-09-22 23:26:54 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,994 bytes |
| コンパイル時間 | 1,381 ms |
| コンパイル使用メモリ | 160,488 KB |
| 実行使用メモリ | 34,816 KB |
| 最終ジャッジ日時 | 2024-11-17 15:11:48 |
| 合計ジャッジ時間 | 71,231 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 12 TLE * 10 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
typedef long long int64;
const int mod = 1e9 + 7;
int N, Q;
int64 A[100001][3][3];
int64 B[100001][2][2];
int64 a[100001][3];
int64 b[100001][2];
void nextA(int i)
{
a[i + 1][0] = A[i][0][0] * a[i][0] + A[i][0][1] * a[i][1] + A[i][0][2] * a[i][2];
a[i + 1][1] = A[i][1][0] * a[i][0] + A[i][1][1] * a[i][1] + A[i][1][2] * a[i][2];
a[i + 1][2] = A[i][2][0] * a[i][0] + A[i][2][1] * a[i][1] + A[i][2][2] * a[i][2];
a[i + 1][0] %= mod;
a[i + 1][1] %= mod;
a[i + 1][2] %= mod;
}
void prevB(int i)
{
b[i - 1][0] = B[i][0][0] * b[i][0] + B[i][0][1] * b[i][1];
b[i - 1][1] = B[i][1][0] * b[i][0] + B[i][1][1] * b[i][1];
b[i - 1][0] += (6 * i + 0) * a[i][0] + (6 * i + 1) * a[i][1] + (6 * i + 2) * a[i][2];
b[i - 1][1] += (6 * i + 3) * a[i][0] + (6 * i + 4) * a[i][1] + (6 * i + 5) * a[i][2];
b[i - 1][0] %= mod;
b[i - 1][1] %= mod;
}
int main()
{
cin >> N;
for(int i = 0; i < 3; i++) cin >> a[0][i];
for(int i = 0; i < 2; i++) cin >> b[N][i];
for(int i = 0; i <= N; i++) for(int j = 0; j < 3; j++) A[i][j][j] = 1;
for(int i = 0; i <= N; i++) for(int j = 0; j < 2; j++) B[i][j][j] = 1;
for(int i = 0; i < N; i++) nextA(i);
for(int i = N; i > 0; i--) prevB(i);
cin >> Q;
while(Q--) {
string type;
cin >> type;
if(type == "a") {
int idx;
cin >> idx;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) cin >> A[idx][i][j];
}
} else if(type == "b") {
int idx;
cin >> idx;
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2; j++) cin >> B[idx][i][j];
}
} else if(type == "ga") {
for(int i = 0; i < N; i++) nextA(i);
int idx;
cin >> idx;
cout << a[idx][0] << " " << a[idx][1] << " " << a[idx][2] << endl;
} else {
for(int i = 0; i < N; i++) nextA(i);
for(int i = N; i > 0; i--) prevB(i);
int idx;
cin >> idx;
cout << b[idx][0] << " " << b[idx][1] << endl;
}
}
}
ei1333333