ykmakuのブログ

競技プログラミングをがんばるブログ

ARC 059 D - アンバランス / Unbalanced

  • 問題

D - アンバランス / Unbalanced

  • 解法

sの部分文字列のうち同じ文字が2つ連続しているところはアンバランスな文字列である。
同じ文字が2つ連続しているところがない場合、過半数を占める文字をAとしたとき、AXAの形の3文字を見つければ良い。なぜなら、同じ文字が2つ連続しているところがない場合を考えているのでアンバランスな文字列はAXAYAHANAXA...Aの形(奇数長でAとA以外が交互に現れるもの)しかあり得ないからだ。

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s;
	cin >> s;

	int l=-1,r=-1;
	for(int i = 1; i < s.length(); i++){
		if(s[i] == s[i-1]){
			l=i,r=i+1;
			break;
		}else if(i < s.length()-1 && s[i-1] == s[i+1]){
			l=i;
			r=i+2;
			break;
		}
	}

	cout << l << " " << r << endl;

	return 0;
}