提出 #67003446


ソースコード 拡げる

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

using ll=long long;

#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) rng(i,0,b)
#define gnr(i,a,b) for(int i=int(b)-1;i>=int(a);i--)
#define per(i,b) gnr(i,0,b)
#define pb push_back
#define eb emplace_back
#define a first
#define b second
#define bg begin()
#define ed end()
#define all(x) x.bg,x.ed
#define si(x) int(x.size())
#ifdef LOCAL
#define dmp(x) cerr<<__LINE__<<" "<<#x<<" "<<x<<endl
#else
#define dmp(x) void(0)
#endif

template<class t,class u> bool chmax(t&a,u b){if(a<b){a=b;return true;}else return false;}
template<class t,class u> bool chmin(t&a,u b){if(b<a){a=b;return true;}else return false;}

template<class t> using vc=vector<t>;
template<class t> using vvc=vc<vc<t>>;

using P=pair<int,int>;
using vi=vc<int>;
const uint mod=998244353;
struct mint{
	uint v;
	mint(ll vv=0){s(vv%mod+mod);}
	mint& s(uint vv){
		v=vv<mod?vv:vv-mod;
		return *this;
	}
	mint operator-()const{return mint()-*this;}
	mint& operator+=(const mint&r){return s(v+r.v);}
	mint&operator-=(const mint&r){return s(v+mod-r.v);}
	mint&operator*=(const mint&r){v=(unsigned long long)v*r.v%mod;return *this;}
	mint&operator/=(const mint&r){return *this*=r.inv();}
	mint operator+(const mint&r)const{return mint(*this)+=r;}
	mint operator-(const mint&r)const{return mint(*this)-=r;}
	mint operator*(const mint&r)const{return mint(*this)*=r;}
	mint operator/(const mint&r)const{return mint(*this)/=r;}
	mint pow(ll n)const{
		if(n<0)return inv().pow(-n);
		mint res(1),x(*this);
		while(n){
			if(n&1)res*=x;
			x*=x;
			n>>=1;
		}
		return res;
	}
	mint inv()const{return pow(mod-2);}
};
using PM=pair<mint,int>;

vc<mint> tw;
struct node{
    node *l,*r;
    int c,s;
    mint d;
    node():l(NULL), r(NULL), c(0), s(0), d(0){}
    void ref(){
        PM p=PM(0,0), q=PM(0,0);
        if(l!=NULL) p=PM(l->d,l->s);
        if(r!=NULL) q=PM(r->d,r->s);
        s = c+p.b+q.b;
        d = p.a*q.a+(tw[c]-1)*tw[p.b+q.b];
    }
};
node root;

void solve(){
    int n;
    cin>>n;
    tw.resize(n+1);
    tw[0]=1;
    for(int i=1;i<=n;i++) tw[i]=tw[i-1]*2;
    vc<node*> mem(500005);
    for(int i=0;i<n;i++){
        string S;
        cin>>S;
        node *at = &root;
        for(int j=0;j<S.size();j++){
            mem[j]=at;
            if(S[j]=='A'){
                if(at->l==NULL){
                    at->l = new node();
                }
                at = at->l;
            } else{
                if(at->r==NULL){
                    at->r = new node();
                }
                at = at->r;
            }
        }
        at->c++;
        at->ref();
        for(int j=S.size()-1;j>=0;j--){
            mem[j]->ref();
        }
        //cout<<root.d.v<<endl;
        cout<<root.d.v<<endl;
    }
}
int main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cout<<fixed<<setprecision(20);
	int T=1;
	while(T--) solve();
}

提出情報

提出日時
問題 C - Prefix Covering
ユーザ yutaka1999
言語 C++ 23 (Clang 16.0.6)
得点 600
コード長 3006 Byte
結果 AC
実行時間 49 ms
メモリ 31044 KiB

コンパイルエラー

./Main.cpp:90:22: warning: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long') [-Wsign-compare]
        for(int j=0;j<S.size();j++){
                    ~^~~~~~~~~
1 warning generated.

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 2
AC × 54
セット名 テストケース
Sample sample-01.txt, sample-02.txt
All 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 05-01.txt, 05-02.txt, 05-03.txt, 05-04.txt, 05-05.txt, 05-06.txt, 05-07.txt, 05-08.txt, 06-01.txt, 06-02.txt, 06-03.txt, 06-04.txt, 06-05.txt, 06-06.txt, 06-07.txt, 06-08.txt, 07-01.txt, 07-02.txt, 07-03.txt, 07-04.txt, 07-05.txt, 08-01.txt, 08-02.txt, 08-03.txt, 08-04.txt, 09-01.txt, 09-02.txt, 09-03.txt, 09-04.txt, sample-01.txt, sample-02.txt
ケース名 結果 実行時間 メモリ
02-01.txt AC 3 ms 6992 KiB
02-02.txt AC 3 ms 6988 KiB
02-03.txt AC 3 ms 6980 KiB
02-04.txt AC 2 ms 7048 KiB
02-05.txt AC 2 ms 7032 KiB
02-06.txt AC 3 ms 7072 KiB
02-07.txt AC 3 ms 7068 KiB
02-08.txt AC 3 ms 7068 KiB
02-09.txt AC 4 ms 6864 KiB
02-10.txt AC 5 ms 7068 KiB
02-11.txt AC 7 ms 7344 KiB
02-12.txt AC 12 ms 7184 KiB
02-13.txt AC 23 ms 7840 KiB
02-14.txt AC 43 ms 8716 KiB
03-01.txt AC 5 ms 6916 KiB
03-02.txt AC 7 ms 7192 KiB
03-03.txt AC 12 ms 7372 KiB
03-04.txt AC 22 ms 7880 KiB
03-05.txt AC 43 ms 8628 KiB
04-01.txt AC 25 ms 31000 KiB
04-02.txt AC 26 ms 31044 KiB
04-03.txt AC 25 ms 30700 KiB
04-04.txt AC 25 ms 30704 KiB
05-01.txt AC 49 ms 9668 KiB
05-02.txt AC 49 ms 10016 KiB
05-03.txt AC 48 ms 10524 KiB
05-04.txt AC 48 ms 11056 KiB
05-05.txt AC 47 ms 11572 KiB
05-06.txt AC 38 ms 20544 KiB
05-07.txt AC 32 ms 25264 KiB
05-08.txt AC 26 ms 29560 KiB
06-01.txt AC 49 ms 9716 KiB
06-02.txt AC 49 ms 9976 KiB
06-03.txt AC 49 ms 10476 KiB
06-04.txt AC 48 ms 11040 KiB
06-05.txt AC 47 ms 11616 KiB
06-06.txt AC 38 ms 20576 KiB
06-07.txt AC 33 ms 25256 KiB
06-08.txt AC 26 ms 29416 KiB
07-01.txt AC 39 ms 9680 KiB
07-02.txt AC 39 ms 9732 KiB
07-03.txt AC 37 ms 9428 KiB
07-04.txt AC 37 ms 9444 KiB
07-05.txt AC 38 ms 9696 KiB
08-01.txt AC 39 ms 9720 KiB
08-02.txt AC 38 ms 9764 KiB
08-03.txt AC 40 ms 9420 KiB
08-04.txt AC 41 ms 9508 KiB
09-01.txt AC 38 ms 9696 KiB
09-02.txt AC 40 ms 9768 KiB
09-03.txt AC 40 ms 9420 KiB
09-04.txt AC 40 ms 9432 KiB
sample-01.txt AC 2 ms 7076 KiB
sample-02.txt AC 2 ms 6916 KiB