結果

問題 No.672 最長AB列
ユーザー seica_at_seseica_at_se
提出日時 2018-04-13 23:45:03
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 23 ms / 2,000 ms
コード長 1,265 bytes
コンパイル時間 2,523 ms
コンパイル使用メモリ 147,808 KB
実行使用メモリ 15,012 KB
最終ジャッジ日時 2023-09-10 04:12:05
合計ジャッジ時間 3,456 ms
ジャッジサーバーID
(参考情報)
judge13 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 5 ms
7,672 KB
testcase_01 AC 5 ms
7,672 KB
testcase_02 AC 4 ms
7,812 KB
testcase_03 AC 5 ms
7,556 KB
testcase_04 AC 5 ms
7,540 KB
testcase_05 AC 5 ms
7,576 KB
testcase_06 AC 5 ms
7,632 KB
testcase_07 AC 5 ms
7,556 KB
testcase_08 AC 4 ms
7,600 KB
testcase_09 AC 23 ms
15,012 KB
testcase_10 AC 20 ms
11,836 KB
testcase_11 AC 20 ms
11,744 KB
testcase_12 AC 12 ms
9,948 KB
testcase_13 AC 12 ms
9,848 KB
testcase_14 AC 12 ms
9,932 KB
testcase_15 AC 12 ms
10,056 KB
testcase_16 AC 12 ms
9,856 KB
testcase_17 AC 19 ms
11,772 KB
testcase_18 AC 11 ms
9,840 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

#define DBG cerr << '!' << endl;
#define REP(i,n) for(ll (i) = (0);(i) < (n);++i)
#define rep(i,s,g) for(ll (i) = (s);(i) < (g);++i)
#define rrep(i,s,g) for(ll (i) = (s);i >= (g);--(i))
#define PB push_back
#define MP make_pair
#define FI first
#define SE second
#define SHOW1d(v,n) {for(int W = 0;W < (n);W++)cerr << v[W] << ' ';cerr << endl << endl;}
#define SHOW2d(v,i,j) {for(int aaa = 0;aaa < i;aaa++){for(int bbb = 0;bbb < j;bbb++)cerr << v[aaa][bbb] << ' ';cerr << endl;}cerr << endl;}
#define ALL(v) v.begin(),v.end()
#define Decimal fixed<<setprecision(10)
#define INF 1000000000
#define MOD 1000000007
#define PI 3.14159265359

typedef long long ll;
typedef pair<ll,ll> P;

int num[222222];

int main()
{
	string str;
	cin >> str;
	
	int a = 0;
	int mi = 0;
	
	REP(i,str.size()){
		num[i+1] = num[i];
		if(str[i] == 'A'){
			num[i+1]++;
		}
		else{
			num[i+1]--;
		}
		mi = min(mi,num[i+1]);
	}
	for(int i = 0;i < str.size()+1;i++)num[i] -= mi;

	//SHOW1d(num,str.size()+1);
	vector<vector<int>> v(200001);
	REP(i,str.size()+1)v[num[i]].PB(i);
	
	int ans = 0;
	REP(i,str.size()+1){
		if(v[i].size() > 1){
			ans = max(ans,(int)(v[i][v[i].size()-1] - v[i][0]));
		}
	}

	cout << ans << endl;
	
	return 0;
}
0