結果

問題 No.3458 Scores of Subsequence
コンテスト
ユーザー くらげ
提出日時 2026-01-06 00:29:13
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
TLE  
実行時間 -
コード長 2,379 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,022 ms
コンパイル使用メモリ 216,460 KB
実行使用メモリ 11,168 KB
最終ジャッジ日時 2026-02-28 13:03:06
合計ジャッジ時間 5,657 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 TLE * 1
other -- * 25
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using P = pair<ll,ll>;
#define rep(i,n) for(int (i) = 0; i<(n); i++)

const int max_n = 200000;

template<ll mod> struct modint{
    public:
    ll x;
    modint(ll x=0) : x((x%mod+mod)%mod) {}
    modint operator-() const { return modint(-x); }
    modint& operator+=(const modint& a){
        if(mod<=(x += a.x)) x-=mod;
        return *this;
    }
    modint& operator-=(const modint& a){
        if(mod<=(x+=mod-a.x)) x-=mod;
        return *this;
    }
    modint& operator*=(const modint& a){
        (x*=a.x)%=mod;
        return *this;
    }
    modint& operator++(){
        ++x;
        return *this;
    }
    modint operator++(int){
        modint temp = *this;
        x++;
        return temp;
    }
    modint& operator--(){
        --x;
        return *this;
    }
    modint operator--(int){
        modint temp = *this;
        x--;
        return temp;
    }
    modint pow(ll t) const{
        modint a=1,b=x;
        while(t){
            if(t&1) a*=b;
            b*=b;
            t/=2;
        }
        return a;
    }
    modint inv() const { return pow(mod-2); }
    modint& operator/=(const modint& a){ return (*this)*=a.inv(); }
    friend modint operator+(const modint& a, const modint& b) { return modint(a)+=b; }
    friend modint operator-(const modint& a, const modint& b) { return modint(a)-=b; }
    friend modint operator*(const modint& a, const modint& b) { return modint(a)*=b; }
    friend modint operator/(const modint& a, const modint& b) { return modint(a)/=b; }
    friend bool operator==(const modint& a, const modint& b) { return (modint(a).x==b.x); }
    friend bool operator!=(const modint& a, const modint& b) { return (modint(a).x!=b.x); }
    friend ostream& operator<<(ostream& os, const modint& m){ os << m.x; return os; }
    friend istream& operator>>(istream& is, modint& m){ is >> m.x; return is; }
};

using fp998=modint<998244353>;

fp998 score(string s){
    int n = s.size(), cnt_a = 0;
    rep(i,n) if(s[i]=='A') cnt_a++;
    if(cnt_a!=1 || s[n-1]!='A') return 0;
    fp998 ans = 1;
    rep(i,n-1) ans *= 2;
    return ans;
}

int main(){
    string s;
    cin >> s;
    int n = s.size();
    
    fp998 ans = 0;
    rep(i,(1<<n)){
        string t;
        rep(j,n) if((i>>j)&1) t += s[j];
        ans += score(t);
    }
    cout << ans << endl;

}
0