AtCoder
AtCoder Beginner Contest 373
- 1スタートであることに注意して比較をする
- A問題はこういうのでいいんだよ...
int main() {
int N = 12;
vector<string> S(N);
for (int i = 0; i < N; i++) {
cin >> S[i];
}
int ans = 0;
for (int i = 0; i < N; i++) {
if (S[i].size() == i + 1){
ans++;
}
}
cout << ans << endl;
}
- 解説とまったく同じ通り、Tempで前のキーの位置を管理して次のキーとの距離を絶対値で求める。
- とはいえ計算量について直感的に問題なさそうだから二重ループで解いたがちゃんと把握できていない。解説も二重ループは使っていない。
- ちなみに解説は配列Xでアルファベットを数値に変換したもので座標管理しているので直感的にややこしい
- B問題はこれでいいんだよ...
int main() {
string S;
cin >> S;
long long ans = 0;
long long temp = 0;
for (int i = 0; i < S.size(); i++) {
for (int j = 0; j < S.size(); j++) {
if (S[j] == 'A' + i){
if (i == 0){
temp = j;
}else{
ans += abs(temp - j);
temp = j;
}
}
}
}
cout << ans << endl;
}
- max_element()を使ってシンプルに最大値を求める問題。もしかするとTLEなのかなと思ったがそんなこともなく
- さすがにちょっと簡単すぎるけど、もうこのくらいじゃないと簡単に早解きできなくなってきた。
int main() {
long long N;
cin >> N;
vector<long long> A(N);
for (long long i = 0; i < N; i++) {
cin >> A[i];
}
vector<long long> B(N);
for (long long i = 0; i < N; i++) {
cin >> B[i];
}
cout << *max_element(begin(A), end(A)) + *max_element(begin(B), end(B)) << endl;
return 0;
}
AtCoder Beginner Contest 348
- if文で場合分けして一撃
- A問題はこれでいいんだよ
int main() {
long long N;
cin >> N;
for (int i = 1; i <= N; i++) {
if (i % 3 == 0){
cout << "x";
}else{
cout << "o";
}
}
}
- シンプル全探索。
- 久々にPairを使った。
- B問題はこれでいいんだよ案件
int main() {
long long N;
cin >> N;
pair<long long, long long> P[N + 1];
for (int i = 1; i <= N; i++) {
long long x,y;
cin >> x >> y;
P[i] = make_pair(x, y);
}
for (int i = 1; i <= N; i++){
long long max = 0;
long long ans = 0;
for (int j = 1; j <= N; j++){
long long tmp = abs(P[i].first - P[j].first) * abs(P[i].first - P[j].first) +
abs(P[i].second - P[j].second) * abs(P[i].second - P[j].second);
if (tmp > max){
max = tmp;
ans = j;
}
}
cout << ans << endl;
}
}
- Mapで色ごとに管理した上でmin_element()メソッドで答えを探していく
- C問題が250点だった時代があったのか
int main() {
long long N;
cin >> N;
map<long long, vector<long long>> P;
for (long long i = 0;i < N; i++) {
long long a,c;
cin >> a >> c;
P[c].push_back(a);
}
long long maxOfMin = 0;
long long ans = 0;
for (auto& [key, values] : P) {
long long tempMin = *min_element(values.begin(), values.end());
if (tempMin > maxOfMin){
maxOfMin = tempMin;
ans = maxOfMin;
}
}
cout << ans << endl;
}
余談だん
NoviStepsのお陰でABCの中でも難易度が低めなセットの回を選んで取り組めるのでとてもありがたい。
結局D問題相当のC問題だったり、そこまでではなくてもそれなりの難易度のC問題だという前提だと疲労がたまっている日や精神的に参っている日に敬遠してしまう。
とはいえ毎日少しでも簡単なものでも取り組むことに意味があると思うのでそういう意味でNoviStepsで難易度を可視化できるのはありがたい。