ログインしてください。
提出 #577452
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define REP(i,n) for(int i = 0; i < (int)(n); ++i)
#define rep REP
#define SZ(a) ((int)(a).size())
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mp make_pair
typedef long long ll;
int solve(const string &s){
vector<int> L(s.size() + 1);
vector<int> R(s.size() + 1);
L[0] = 0;
R[0] = 0;
REP(i, s.size()){
if (s[i] == '<'){
L[i + 1] = L[i] + 1;
R[i + 1] = R[i];
} else {
L[i + 1] = L[i];
R[i + 1] = R[i] + 1;
}
}
int res = 0;
REP(i, s.size()) if (s[i] == '>'){
int l = R[i + 1]; // '>'
int r = L[s.size()] - L[i + 1]; // '<'
int d = min(l, r);
if (r >= l){
int lb = i + 1;
int ub = s.size();
// cout << s << " " << i << " " << d << " " << L[6] - L[i + 1] <<endl;
while (ub - lb > 1){
int mb = (lb + ub) >> 1;
if (L[mb] - L[i + 1] >= d){
ub = mb;
} else {
lb = mb;
}
}
res = max(res, ub);
} else {
int lb = 0;
int ub = i + 1;
int d = l - r;
while (ub - lb > 1){
int mb = (ub + lb) >> 1;
if (R[mb] >= d) ub = mb;
else lb = mb;
}
res = max(res, (int)s.size() - lb);
}
}
return res;
}
int naive(string s){
int ans = 0;
rep(i, SZ(s)){
vector<bool> use(SZ(s));
int cur = i;
int dir = s[i] == '<' ? -1 : 1;
int cnt = 0;
while(cur >= 0 && cur < SZ(s)){
if(use[cur]){
cur += dir;
continue;
}
use[cur] = true;
++cnt;
dir = s[cur] == '<' ? -1 : 1;
}
ans = max(ans, cnt);
}
return ans;
}
int main(int argc, char **argv){
int n;
string s;
while (cin >> n >> s){
int res = solve(s);
// int na = naive(s);
reverse(ALL(s));
for (auto &c : s) {
if (c == '>') c = '<';
else c = '>';
}
// cout << s << endl;
res = max(res, solve(s));
// if(naive(s) != res || na != naive(s)){
// cout << na << endl;
// cout << "naive " << naive(s) << endl;
// cout << res << endl;
// cout << s << endl;
// exit(1);
// }
cout << res << endl;
}
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - Line Gimmick |
| ユーザ | mmnegainoido |
| 言語 | C++11 (GCC 4.8.1) |
| 得点 | 100 |
| コード長 | 2332 Byte |
| 結果 | AC |
| 実行時間 | 49 ms |
| メモリ | 1824 KiB |
ジャッジ結果
| セット名 | All | ||
|---|---|---|---|
| 得点 / 配点 | 100 / 100 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| All | 00_sample_00, 00_sample_01, 00_sample_02, 00_sample_03, 10_simple_small_000, 10_simple_small_001, 10_simple_small_002, 10_simple_small_003, 10_simple_small_004, 11_simple_med_000, 11_simple_med_001, 11_simple_med_002, 11_simple_med_003, 11_simple_med_004, 12_simple_large_000, 12_simple_large_001, 12_simple_large_002, 12_simple_large_003, 12_simple_large_004, 21_answer_med_000, 21_answer_med_001, 21_answer_med_002, 21_answer_med_003, 21_answer_med_004, 22_answer_large_000, 22_answer_large_001, 22_answer_large_002, 22_answer_large_003, 22_answer_large_004 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00 | AC | 24 ms | 928 KiB |
| 00_sample_01 | AC | 24 ms | 748 KiB |
| 00_sample_02 | AC | 24 ms | 748 KiB |
| 00_sample_03 | AC | 23 ms | 924 KiB |
| 10_simple_small_000 | AC | 24 ms | 748 KiB |
| 10_simple_small_001 | AC | 24 ms | 812 KiB |
| 10_simple_small_002 | AC | 24 ms | 676 KiB |
| 10_simple_small_003 | AC | 24 ms | 808 KiB |
| 10_simple_small_004 | AC | 23 ms | 920 KiB |
| 11_simple_med_000 | AC | 24 ms | 928 KiB |
| 11_simple_med_001 | AC | 24 ms | 928 KiB |
| 11_simple_med_002 | AC | 27 ms | 804 KiB |
| 11_simple_med_003 | AC | 24 ms | 748 KiB |
| 11_simple_med_004 | AC | 24 ms | 924 KiB |
| 12_simple_large_000 | AC | 36 ms | 1436 KiB |
| 12_simple_large_001 | AC | 35 ms | 1316 KiB |
| 12_simple_large_002 | AC | 49 ms | 1700 KiB |
| 12_simple_large_003 | AC | 45 ms | 1708 KiB |
| 12_simple_large_004 | AC | 45 ms | 1736 KiB |
| 21_answer_med_000 | AC | 44 ms | 1692 KiB |
| 21_answer_med_001 | AC | 45 ms | 1704 KiB |
| 21_answer_med_002 | AC | 46 ms | 1692 KiB |
| 21_answer_med_003 | AC | 36 ms | 1316 KiB |
| 21_answer_med_004 | AC | 45 ms | 1708 KiB |
| 22_answer_large_000 | AC | 37 ms | 1440 KiB |
| 22_answer_large_001 | AC | 45 ms | 1824 KiB |
| 22_answer_large_002 | AC | 39 ms | 1516 KiB |
| 22_answer_large_003 | AC | 37 ms | 1564 KiB |
| 22_answer_large_004 | AC | 46 ms | 1824 KiB |