結果
| 問題 | No.2983 Christmas Color Grid (Advent Calender ver.) |
| コンテスト | |
| ユーザー |
highlighter
|
| 提出日時 | 2024-11-23 23:26:03 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,304 bytes |
| 記録 | |
| コンパイル時間 | 3,795 ms |
| コンパイル使用メモリ | 249,352 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-23 23:26:17 |
| 合計ジャッジ時間 | 12,720 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 RE * 1 |
| other | AC * 40 RE * 24 |
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:32:23: warning: iteration 24 invokes undefined behavior [-Waggressive-loop-optimizations]
32 | inv[i]=M-inv[M%i]*(M/i)%M;
| ~~~~~~^~~~~~~~~~~~~~~~~~~
main.cpp:31:22: note: within this loop
31 | for(int i=2;i<=26;i++){
| ~^~~~
ソースコード
#include<bits/stdc++.h>
using namespace std;
long long powers[26];
int H,W,M;
long long K;
long long inv[26];
int main(){
scanf("%d%d%lld%d",&H,&W,&K,&M);
assert(H*W<=20);
int d[4]={-1,1,-W,W};
powers[1]=1;
for(int i=2;i<=25;i++){
powers[i]=1;
long long mul=i;
long long t=K;
while(t){
if(t&1){
powers[i]*=mul;
powers[i]%=M;
}
mul*=mul;
mul%=M;
t>>=1;
}
}
inv[1]=1;
for(int i=2;i<=26;i++){
inv[i]=M-inv[M%i]*(M/i)%M;
}
long long res=0;
for(int i=0;i<(1<<H*W);i++){
//+-1,+-Wが隣り合う
int b=0;
for(int j=0;j<H*W;j++){
if(!(i&(1<<j))){
continue;
}
if((b&(1<<j))){
continue;
}
b|=(1<<j);
queue<int> que;
que.push(j);
int count=1;
while(!que.empty()){
int v=que.front();
que.pop();
for(int k=0;k<4;k++){
int nv=v+d[k];
if(k==0 || k==1){
if(v/W!=nv/W){
continue;
}
}
if(nv>=H*W || nv<0){
continue;
}
if(!(i&(1<<nv))){
continue;
}
if(((b&(1<<nv)))){
continue;
}
b|=(1<<nv);
que.push(nv);
count++;
}
}
res+=powers[count];
res%=M;
}
}
long long ans=0;
for(int i=1;i<=H*W;i++){
ans+=inv[i];
ans%=M;
}
for(int i=0;i<H*W;i++){
ans*=(M+1)/2;
ans%=M;
}
cout << ans*res%M << endl;
}
highlighter