Official
A - >_< Editorial
by
A - >_< Editorial
by
penguinman
各 \(i\ (2 \leq i \leq N)\) について、問題文中の \(2\) つの条件(任意の \(j\ (\lt i)\) について \(P_j \lt P_i\) が成り立つか、あるいは \(P_j \gt P_i\) が成り立つか)のうちどちらが満たされるかを決め打ったとします。
決め打ち方は \(2^{N-1}\) 通りありますが、そのそれぞれと出来上がる \(P\) は一対一で対応します。
よって答えは \(2^{N-1}\) となります。計算量は繰り返し二乗法を用いると \(O(\log N)\) です。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int mod = 998244353;
ll modpow(ll X, ll Y){
ll ret = 1;
while(0 < Y){
if(Y & 1){
ret = ret*X%mod;
}
X = X*X%mod;
Y >>= 1;
}
return ret;
}
int main(){
ll N; cin >> N;
cout << modpow(2,N-1) << endl;
}
なお、Python の pow 関数を用いると非常に簡単に AC することができます。
実装例 (Python)
print(pow(2,int(input())-1,998244353))
posted:
last update: