結果
| 問題 |
No.2738 CPC To F
|
| コンテスト | |
| ユーザー |
0214sh7
|
| 提出日時 | 2024-04-20 20:28:36 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 64 ms / 2,000 ms |
| コード長 | 2,015 bytes |
| コンパイル時間 | 2,198 ms |
| コンパイル使用メモリ | 199,280 KB |
| 最終ジャッジ日時 | 2025-02-21 07:21:59 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 22 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> PP;
// #define MOD 1000000007
#define MOD 998244353
#define INF 2305843009213693951
//#define INF 810114514
#define PI 3.141592653589
#define setdouble setprecision
#define REP(i,n) for(ll i=0;i<(n);++i)
#define OREP(i,n) for(ll i=1;i<=(n);++i)
#define RREP(i,n) for(ll i=(n)-1;i>=0;--i)
#define ORREP(i,n) for(ll i=(n);i>=1;--i)
#define rep(i,a,b) for(ll i=(a);i<=(b);++i)
#define ALL(v) (v).begin(), (v).end()
#define GOODBYE do { cout << "-1" << endl; return 0; } while (false)
#define MM <<" "<<
#define Endl endl
#define debug true
#define debug2 false
int main(void){
//cin.tie(nullptr);
//ios::sync_with_stdio(false);
ll N;
cin >> N;
string S;
cin >> S;
// dp[i][j] := i文字目まで見た、j文字まで選択する を何回繰り返せたか
vector<vector<ll>> dp(N+1,vector<ll>(5,-INF));
dp[0][0] = 0;
// 0: なにもない
// 1: Cがある
// 2: CPがある
// 3: CPCがある
// 4: CPCTがある
REP(i,N){
// if(S[i]=='C'){
// dp[i+1][1] = max(dp[i+1][1],0ll);
// }
dp[i+1][0] = max(dp[i+1][0],dp[i][0]);
REP(j,5){
if(j!=4 && S[i]=="CPCTF"[j]){
dp[i+1][j+1] = max(dp[i+1][j+1],dp[i][j]);
}
if(j==4 && S[i]=='F'){
dp[i+1][0] = max(dp[i+1][0],dp[i][j]+1);
}
if(j==4 && i+3<=N && S[i]=='C' && S[i+1]=='P' && S[i+2]=='C'){
dp[i+3][0] = max(dp[i+3][0],dp[i][j]+1);
}
}
}
// REP(j,5){
// REP(i,N+1){
// cout << (dp[i][j]<=-INF/2?9ll:dp[i][j]) << " ";
// }cout << endl;
// }
ll Ans = 0;
REP(i,N+1){
Ans = max(Ans,dp[i][0]);
}
cout << Ans << endl;
return 0;
}
0214sh7