結果
| 問題 |
No.996 Phnom Penh
|
| コンテスト | |
| ユーザー |
momohara
|
| 提出日時 | 2020-02-21 22:23:40 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,332 bytes |
| コンパイル時間 | 1,263 ms |
| コンパイル使用メモリ | 103,120 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-10-08 21:56:18 |
| 合計ジャッジ時間 | 2,555 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 7 WA * 18 |
ソースコード
#include <iostream>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
#include<cstring>
#include<string>
#include<cassert>
#include<cmath>
#include<climits>
#include<iomanip>
#include<bitset>
#include<unordered_map>
using namespace std;
#define REP(i,n) for(ll (i)=0;(i)<(n);(i)++)
#define rep(i,j,n) for(ll (i)=(j);(i)<(n);(i)++)
#define FOR(i,c) for(decltype((c).begin())i=(c).begin();i!=(c).end();++i)
#define ll long long
#define ull unsigned long long
#define all(hoge) (hoge).begin(),(hoge).end()
#define en '\n'
typedef pair<ll, ll> P;
const long long INF = 1LL << 60;
const long long MOD = 1e9 + 7;
typedef vector<ll> Array;
typedef vector<Array> Matrix;
const int loose = 0;
const int tight = 1;
template<class T> inline bool chmin(T& a, T b) {
if (a > b) {
a = b;
return true;
}
return false;
}
template<class T> inline bool chmax(T& a, T b) {
if (a < b) {
a = b;
return true;
}
return false;
}
//グラフ関連
struct Edge {//グラフ
ll to, cap, rev;
Edge(ll _to, ll _cap, ll _rev) {
to = _to; cap = _cap; rev = _rev;
}
};
typedef vector<Edge> Edges;
typedef vector<Edges> Graph;
void add_edge(Graph& G, ll from, ll to, ll cap, bool revFlag, ll revCap) {
G[from].push_back(Edge(to, cap, (ll)G[to].size()));
if (revFlag)G[to].push_back(Edge(from, revCap, (ll)G[from].size() - 1));
}
ll mod_pow(ll x, ll n, ll mod) {
ll res = 1LL;
while (n > 0) {
if (n & 1) res = res * x % mod;
x = x * x % mod;
n >>= 1;
}
return res;
}
ll mod_inv(ll x, ll mod) {
return mod_pow(x, mod - 2, mod);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string s;
cin >> s;
ll n = s.size();
bool flag_phn = false;
bool flag_o = false;
ll con = 0;
ll ans = 0;
REP(i, n) {
if (flag_phn) {
if (con >= 1 && s[i] == 'h') continue;
if (con >= 2 && s[i] == 'e') continue;
if (flag_o) {
if (s[i] == 'm') {
con++;
chmax(ans, 2 * con + 1);
flag_o = false;
}
else {
con = 0;
flag_o = false;
flag_phn = false;
}
}
else {
if (s[i] == 'o') {
flag_o = true;
}
else {
con = 0;
flag_phn = false;
}
}
}
if (!flag_phn) {
if (i + 2 >= n) break;
if (s.substr(i, 3) == "phn") {
flag_phn = true;
i += 2;
}
}
}
flag_phn = false;
flag_o = false;
con = 0;
REP(i, n) {
if (s[i] == 'h') continue;
if (flag_phn) {
if (con >= 1 && s[i] == 'e') continue;
if (flag_o) {
if (s[i] == 'm') {
con++;
chmax(ans, 2 * con + 2);
flag_o = false;
}
else {
con = 0;
flag_o = false;
flag_phn = false;
}
}
else {
if (s[i] == 'o') {
flag_o = true;
}
else {
con = 0;
flag_phn = false;
}
}
}
if (!flag_phn) {
if (i + 2 >= n) break;
if (s.substr(i, 3) == "pen") {
flag_phn = true;
i += 2;
}
else {
if (i + 3 >= n) break;
if (s.substr(i, 4) == "phen" || s.substr(i, 4) == "pehn") {
flag_phn = true;
i += 3;
}
else {
if (i + 4 >= n) break;
if (s.substr(i, 5) == "phehn") {
flag_phn = true;
i += 4;
}
}
}
}
}
REP(i, n) {
if (s[i] == 'h') {
chmax(ans, 1LL);
}
if (s[i] == 'e') {
chmax(ans, 2LL);
break;
}
}
cout << ans << endl;
return 0;
}
momohara