結果
| 問題 | No.1112 冥界の音楽 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-02-23 15:50:28 |
| 言語 | C++14 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,779 bytes |
| 記録 | |
| コンパイル時間 | 1,904 ms |
| コンパイル使用メモリ | 192,700 KB |
| 実行使用メモリ | 1,484,360 KB |
| 最終ジャッジ日時 | 2026-02-23 15:50:36 |
| 合計ジャッジ時間 | 8,732 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 3 |
| other | WA * 3 MLE * 1 -- * 30 |
ソースコード
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000010;
const int mod=998244353;
const int INF=0x3f3f3f3f3f3f3f3f;
namespace Matrix{
typedef vector<vector<int> > Mat;
Mat init(int n,int c){return Mat(n,vector<int>(n,c));}
void print(Mat a){
cerr<<"---------------------------\n";
for(auto x:a){
for(auto y:x)cerr<<y<<" ";
cerr<<"\n";
}
cerr<<"---------------------------\n";
return;
}
Mat operator * (Mat a,Mat b){
assert(a.size()==b.size());
int n=a.size();
Mat z=init(n,0);
for(int k=0;k<n;k++)for(int i=0;i<n;i++)for(int j=0;j<n;j++)z[i][j]=(z[i][j]+a[i][k]*b[k][j])%mod;
return z;
}
Mat operator ^ (Mat a,int b){
int n=a.size();
Mat z=init(n,0);
for(int i=0;i<n;i++)z[i][i]=1;
while(b){
if(b&1)z=z*a;
a=a*a;
b>>=1;
}
return z;
}
}
using namespace Matrix;
int n,k;
int dot(int a,int b,int c){
return a*k*k+b*k+c;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// freopen("xyz.in","r",stdin);
// freopen("xyz.out","w",stdout);
cin>>n>>k;
Mat a=init(k*k*k,0);
Mat b=init(k*k*k,0);
a[0][0]=1;
for(int i=0;i<k;i++){
for(int j=0;j<k;j++){
for(int t=0;t<k;t++){
b[dot((i+1)%k,j,t)][dot(i,j,t)]++;
b[dot(i,(j+i)%k,t)][dot(i,j,t)]++;
b[dot(i,j,(t+j)%k)][dot(i,j,t)]++;
}
}
}
// print(b);
a=(b^n)*a;
// print(a);
int ans=0;
for(int i=0;i<k;i++){
for(int j=0;j<k;j++){
ans=(ans+a[dot(i,j,0)][0])%mod;
}
}
cout<<ans<<"\n";
return 0;
}
/*
dp[i][j][t] 'X'=i (mod k),'XY'=j (mod k),'XYZ'=t (mod k)
dp[i+1][j][t] <- dp[i][j][t]
dp[i][(j+i)%k][t] <- dp[i][j][t]
dp[i][j][(t+j)%k] <- dp[i][j][t]
*/
vjudge1