UOJ60.【UR #5】怎樣提高智商
阿新 • • 發佈:2022-12-11
簡要題意
謎題集中有 \(n\) 個謎題,第 \(i\) 個謎題形如:
\(i.\) 編號小於 \(i\) 的題目中你選擇了幾個 \(h_i\)?
A. \(a_i\)
B. \(b_i\)
C. \(c_i\)
D. \(d_i\)
給定 \(n\),你需要構造一個謎題集,使得不同的正確答案數量儘可能多。輸出正確答案數量(對 \(998244353\) 取模)和方案。若有多組解,輸出任意一組解即可。
\(1 \leq n \leq 10^5\)
思路
構造。
每一道謎題中所有選項都可以選是不可能的。(但是第一題四個選項可以都選)
於是我們退而求其次,考慮編號 \(\geq2\) 的可以選 \(3\)
於是,我們驚奇的發現構造完了!
正確答案數量就是 \(4\cdot3^{n-1}\)。
程式碼
#include <bits/stdc++.h> #define int long long using namespace std; const int mod = 998244353; int fastpow(int a,int b,int mod){ if(b==1)return a%mod; if(b==0)return 1%mod; int ret=1; if(b&1){ ret*=b; ret%=mod; b--; } int k=fastpow(a,b>>1,mod); return ret*k*k; } int n; signed main(){ cin>>n; cout<<4*fastpow(3,n-1,mod)<<'\n'; for(int i=1;i<=n;i++){ cout<<"A 0 0 0 0\n"; } return 0; }