結果

問題 No.3584 Camouflage Mole
コンテスト
ユーザー Lidelie
提出日時 2026-07-10 22:46:55
言語 C++23
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 80 ms / 2,000 ms
コード長 2,748 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,007 ms
コンパイル使用メモリ 331,724 KB
実行使用メモリ 74,112 KB
最終ジャッジ日時 2026-07-10 22:47:06
合計ジャッジ時間 6,459 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 37
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp:102:16: warning: space between quotes and suffix is deprecated in C++23 [-Wdeprecated-literal-operator]
  102 | mint operator"" _m(unsigned long long val){return mint(val);}
      |                ^
      |                -
main.cpp:102:16: warning: space between quotes and suffix is deprecated in C++23 [-Wdeprecated-literal-operator]
  102 | mint operator"" _m(unsigned long long val){return mint(val);}
      |                ^
      |                -

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

class mint{
private:
    inline static ll mod = 998244353;
    static const int binom_n = 3000001;
    ll val;
public:
    inline static ll fact[binom_n],finv[binom_n],inver[binom_n];
    static void set_mod(ll m){
        mod = m;
    }
    /// @brief O(n)
    static void init(){
        fact[0] = fact[1] = 1;
        finv[0] = finv[1] = 1;
        inver[1] = 1;
        for (int i = 2; i < binom_n; i++){
            fact[i] = fact[i - 1] * i % mod;
            inver[i] = mod - inver[mod%i] * (mod / i) % mod;
            finv[i] = finv[i - 1] * inver[i] % mod;
        }
    }
    /// @brief O(1)
    static mint binom(ll n,ll r){
        if(n < r)return 0;
        if(n < 0 || r < 0)return 0;
        return mint(fact[n] * (finv[r] * finv[n-r] % mod) %mod);
    }
    static mint fac(ll n){
        return fact[n];
    }
    static mint fac_inv(ll n){
        return finv[n];
    }
    mint(ll v = 0) : val((v%mod + mod)%mod){}
    const ll operator*() const {
        return val;
    }
    const bool operator==(const mint &a){
        return (val == *a);
    }
    const bool operator!=(const mint &a){
        return (val != *a);
    }
    mint& operator+=(const mint& a){
        if((val += *a) >= mod) val -= mod;
        return *this;
    }
    mint& operator-=(const mint& a){
        if((val += mod-*a) >= mod)val -= mod;
        return *this;
    }
    mint& operator*=(const mint& a){
        (val *= *a) %= mod;
        return *this;
    }
    mint operator+(const mint& a) const {
        mint res(*this);
        return res += a;
    }
    mint operator-(const mint& a) const {
        mint res(*this);
        return res -= a;
    }
    mint operator*(const mint& a) const {
        mint res(*this);
        return res *= a;
    }
    mint operator/(const mint& a) const {
        mint res(*this);
        return res *= inv(a);
    }
    /// @brief O(log n)
    static mint pow(mint a,ll n){
        ll _a = *a, _n = n;
        ll res = 1;
        while(_n > 0){
            if(_n&1)res = res*_a %mod;
            _a = _a*_a %mod;
            _n = _n>>1;
        }
        return mint(res);
    }
    /// @brief O(log mod)
    static mint inv(mint n){
        ll a = *n;
        ll b = mod,u = 1,v=0;
        while(b){
            ll t = a/b;
            a -= t*b;swap(a,b);
            u -= t*v;swap(u,v);
        }
        u%=mod;
        if(u<0)u += mod;
        return mint(u);
    }

};
mint operator"" _m(unsigned long long val){return mint(val);}
istream& operator>>(istream& is, mint& x){ ll v; is >> v; x = v; return is; }

int main(){
    mint::init();
    ll n;
    cin >> n;
    cout << *(mint::binom(n,4) * mint::pow(26,max(0ll,n-4))) << endl;
}
0