結果
| 問題 | No.2045 Two Reflections |
| コンテスト | |
| ユーザー |
Tehom
|
| 提出日時 | 2026-08-02 14:38:20 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
AC
|
| 実行時間 | 16 ms / 2,000 ms |
| + 951µs | |
| コード長 | 1,903 bytes |
| 記録 | |
| コンパイル時間 | 4,262 ms |
| コンパイル使用メモリ | 380,016 KB |
| 実行使用メモリ | 12,440 KB |
| 最終ジャッジ日時 | 2026-08-02 14:38:32 |
| 合計ジャッジ時間 | 6,027 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 27 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
#define ll long long
#define rep(i,a,b) for(int i=(a);i<(b);i++)
#define repl(i,a,b) for(ll i=(a);i<(b);i++)
#define all(a) (a).begin(),(a).end()
#define rall(a) (a).rbegin(),(a).rend()
template <typename T> bool chmin(T &a,T b){if(a>b){a=b;return true;} return false;}
template <typename T> bool chmax(T &a,T b){if(a<b){a=b;return true;} return false;}
void solve(){
int n,a,b; cin >> n >> a >> b;
using mint=modint998244353;
if(a == 1 || b == 1){
if(a == b){
cout << "1\n";
}
else{
cout << "2\n";
}
return;
}
vector<int> p(n),q(n);
iota(all(p),0);
iota(all(q),0);
rep(i,0,a) p[i]=a-1-i;
rep(i,0,b) q[n-1-i]=n-b+i;
vector<int> r(n);
rep(i,0,n) r[i]=p[q[i]];
// rep(i,0,n) cout << r[i] << " "; cout << "\n";
vector<bool> seen(n,false);
mint t=1;
vector<ll> c;
rep(i,0,n){
if(seen[i])continue;
int cnt=1;
int now=i;
seen[now]=true;
while(!seen[r[now]]){
cnt++;
now=r[now];
seen[now]=true;
}
c.push_back(cnt);
}
// rep(i,0,c.size()) cout << c[i] << " "; cout << "\n";
vector<bool> isprime(n+1,true);
rep(p,2,n+1){
if(!isprime[p]) continue;
for(int q=2*p;q<=n;q+=p) isprime[q]=false;
}
vector<vector<pair<int,int>>> fac(n+1);
rep(p,2,n+1)if(isprime[p]){
for(int q=p;q<=n;q+=p){
int cnt=0;
int tmp=q;
while(tmp%p == 0){
cnt++;
tmp/=p;
}
fac[q].push_back({p,cnt});
}
}
vector<int> mx_ex(n+1);
rep(i,0,c.size()){
for(auto [p,cnt]:fac[c[i]]){
chmax(mx_ex[p],cnt);
}
}
mint ans=1;
rep(i,0,n+1)if(mx_ex[i]) ans*=mint(i).pow(mx_ex[i]);
ans*=2;
cout << ans.val() << "\n";
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T=1;
// cin >> T;
while(T--) solve();
}
Tehom