結果
問題 | No.2983 Christmas Color Grid (Advent Calender ver.) |
ユーザー |
![]() |
提出日時 | 2024-12-08 00:42:26 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 708 ms / 3,340 ms |
コード長 | 1,269 bytes |
コンパイル時間 | 4,351 ms |
コンパイル使用メモリ | 253,816 KB |
最終ジャッジ日時 | 2025-02-26 11:31:19 |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 64 |
ソースコード
#include <stdio.h>#include <atcoder/all>#include <bits/stdc++.h>using namespace std;using namespace atcoder;using mint = modint;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf32 1000000001#define Inf64 4000000000000000001LLbool f[1<<25];mint powK[27];mint combi[27][27];mint ans;int H,W;void dfs(int bit){if(f[bit])return;f[bit] = true;int ok = H*W;rep(i,H*W){if((bit>>i)&1){ok --;continue;}bool tf = true;if(i-W>=0 && ((bit>>(i-W))&1)){dfs(bit|(1<<i));tf = false;}if(i+W<H*W && ((bit>>(i+W))&1)){dfs(bit|(1<<i));tf = false;}if(i%W!=0 && ((bit>>(i-1))&1)){dfs(bit|(1<<i));tf = false;}if(i%W!=W-1 && ((bit>>(i+1))&1)){dfs(bit|(1<<i));tf = false;}if(!tf)ok--;}ans += mint(2).pow(ok) * powK[__builtin_popcount(bit)];}int main(){long long K,M;cin>>H>>W>>K>>M;mint::set_mod(M);rep(i,H*W+1)powK[i] = mint(i).pow(K);combi[0][0] = 1;for(int i=1;i<=26;i++){for(int j=0;j<=i;j++){combi[i][j] += combi[i-1][j];if(j!=0)combi[i][j] += combi[i-1][j-1];}}rep(i,H*W){dfs(1<<i);}mint sum =0;for(int i=1;i<=H*W;i++){sum += mint(i).inv();}ans *= mint(2).pow(H*W).inv();ans *= sum;cout<<ans.val()<<endl;return 0;}