@vampiro

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【ABC421】AtCoder Beginner Contest 421 C問題 改良について

Discussion

解決したいこと

つい先日AtCoderに登録した初学者の社会人です。
以下のコードについて、実行時間が21msでコード長が635Byteでした。
より簡潔に書けたり、高速にできたりする技術や考え方があれば、
教えていただきたいです。

該当するソースコード

#include <bits/stdc++.h>
using namespace std;

int main(){

	long long N;
	long long count = 0;
	long long result_ab = 0;
	long long result_ba = 0;

	string S;

	cin >> N >> S;

	vector<int> ba(N);
	vector<int> ab(N);
	vector<int> a_now(2*N);

	for(int i = 0; i < N; i++){
		ab[i] = 2*i;
	}

	for(int i = 0; i < N; i++){
		ba[i] = 2*i + 1;
	}

	for(int i = 0; i < 2 * N; i++){
		if(S[i] == 'A'){
			a_now[count] = i;
			count++;
		} 
	}

	for(int i = 0; i < N; i++){
		result_ab += abs(ab[i] - a_now[i]);
		result_ba += abs(ba[i] - a_now[i]);

	}

	cout << min(result_ab, result_ba) << endl;
}
0 likes

この内容だと、ループを一つにまとめるぐらいしか工夫のしどころが無い気はします。

#include <bits/stdc++.h>
using namespace std;

int main() {

	long long N;
	long long count = 0;
	long long result_ab = 0;
	long long result_ba = 0;

	string S;

	cin >> N >> S;

	for (int i = 0; i < 2 * N; i++) {
		if (S[i] == 'A') {
			result_ab += abs(2 * count - i);
			result_ba += abs(2 * count + 1 - i);
			count++;
		}
	}

	cout << min(result_ab, result_ba) << endl;
}
1Like

atcoder内で他の参加者のコードを見られるのは知りませんでした。
ありがとうございます。

0Like

Your answer might help someone💌