kmjp's blog

競技プログラミング参加記です

dwangoプログラミングコンテスト予選 : A - プレミアム会員、B - ニコニコ文字列

dwangoコンテスト予選に参加。
Cまではサクサク解けたが、DEが部分点どまりで終了。
http://dwango2015-prelims.contest.atcoder.jp/tasks/dwango2015_prelims_1
http://dwango2015-prelims.contest.atcoder.jp/tasks/dwango2015_prelims_2

A - プレミアム会員

Nか月のうち、最近xか月は月540円、それ以前は月525円払った。
払って金額の総計を答えよ。

x*540 + (N-x)*525を答えるだけ。

int N,X;

void solve() {
	int i,j,k,l,r,x,y; string s;
	
	cin>>N>>X;
	cout<<X*540+(N-X)*525<<endl;
}

B - ニコニコ文字列

文字列のうち"25"だけを複数連結して構成できる文字列をニコニコ文字列という。
文字列Sが与えられるので、Sの連続した部分文字列でニコニコ文字列となるものの数を求めよ。

"25"がn個連続していたら、そこからn*(n+1)/2個のニコニコ文字列である部分文字列が生成できる。

ll ret;
string S;
void solve() {
	int i,j,k,l,r,x,y; string s;
	cin>>S;
	
	x=0;
	FOR(i,S.size()) {
		if((x%2==0 && S[i]=='2') || (x%2==1 && S[i]=='5')) x++;
		else {
			ret+=1LL*(x/2)*(x/2+1)/2;
			x=0;
			if(x%2==0 && S[i]=='2') x++;
		}
	}
	ret+=1LL*(x/2)*(x/2+1)/2;
	cout<<ret<<endl;
}