結果
| 問題 |
No.2367 Painting Gascket
|
| コンテスト | |
| ユーザー |
Nachia
|
| 提出日時 | 2023-06-30 21:58:18 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 25 ms / 2,000 ms |
| コード長 | 1,303 bytes |
| コンパイル時間 | 801 ms |
| コンパイル使用メモリ | 80,140 KB |
| 最終ジャッジ日時 | 2025-02-15 03:51:24 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 34 |
ソースコード
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <atcoder/modint>
using namespace std;
using i32 = int;
using u32 = unsigned int;
using i64 = long long;
using u64 = unsigned long long;
#define rep(i,n) for(int i=0; i<(int)(n); i++)
const i64 INF = 1001001001001001001;
using Modint = atcoder::static_modint<1000000007>;
int main(){
int N, K; cin >> K >> N;
Modint n = N;
vector<Modint> dp(7, n);
// 0 x x x
// 1 x x 0
// 2 x 0 0
// 3 x 0 1
// 4 0 0 0
// 5 0 0 1
// 6 0 1 2
dp[1] -= 1;
dp[2] -= 1;
dp[3] -= 2;
dp[4] -= 1;
dp[5] -= 2;
dp[6] -= 3;
for(int k=1; k<=K; k++){
vector<Modint> tmp(7);
tmp[0] = dp[1] * dp[1] * dp[1] * n;
tmp[1] = dp[1] * dp[3] * dp[3] * (n-1) + dp[1] * dp[2] * dp[2];
tmp[2] = dp[3] * dp[3] * dp[5] * (n-1) + dp[2] * dp[2] * dp[4];
tmp[3] = dp[3] * dp[3] * dp[6] * (n-2) + dp[2] * dp[3] * dp[5] * 2;
tmp[4] = dp[5] * dp[5] * dp[5] * (n-1) + dp[4] * dp[4] * dp[4];
tmp[5] = dp[5] * dp[6] * dp[6] * (n-2) + dp[4] * dp[5] * dp[5] + dp[5] * dp[5] * dp[5];
tmp[6] = dp[6] * dp[6] * dp[6] * (n-3) + dp[6] * dp[5] * dp[5] * 3;
swap(dp, tmp);
}
cout << dp[0].val() << endl;
return 0;
}
Nachia