結果

問題 No.2276 I Want AC
コンテスト
ユーザー Kou0406
提出日時 2025-02-01 11:36:43
言語 C++14
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=c++14 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 8 ms / 2,000 ms
コード長 876 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 680 ms
コンパイル使用メモリ 82,036 KB
実行使用メモリ 7,224 KB
最終ジャッジ日時 2026-06-27 06:40:53
合計ジャッジ時間 3,976 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 56
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<iostream>
#include<vector>
#include<cassert>
#define rep(i,n) for(i=0;i<(int)(n);i++)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;

int n;
string s;

int main(){
    int i,j;
    ll ans=0,tmp;
    scanf("%d",&n);
    cin>>s;
    vector<int> sumA(1,0),sumC(1,0),sumQ(1,0),qs;
    rep(i,n){
        sumA.push_back(sumA[i]+(s[i]=='A'));
        sumC.push_back(sumC[i]+(s[i]=='C'));
        sumQ.push_back(sumQ[i]+(s[i]=='?'));
        if(s[i]=='?')qs.push_back(i);
    }
    // ?の部分は,A~AC~Cのように選ぶのが最適
    // ?が全てCの場合から始める
    tmp=0;
    rep(i,n)if(s[i]=='A')tmp+=sumC[n]-sumC[i]+sumQ[n]-sumQ[i];
    ans=tmp;
    rep(i,qs.size()){
        tmp-=sumA[qs[i]]+i;
        tmp+=sumC[n]-sumC[qs[i]]+sumQ[n]-sumQ[qs[i]+1];
        ans=max(ans,tmp);
    }
    printf("%lld\n",ans);
    return 0;
}
0