提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |