AtCoderの過去問対策です。ABCで解けなかった問題、ためになった問題のコードを備忘録として残します。
問題
解説
Editorial - SuntoryProgrammingContest2023(AtCoder Beginner Contest 321)
解答例1
#include <bits/stdc++.h>usingnamespacestd; intmain(){ string N; cin>> N; string result = "Yes"; for(int i = 0, len = N.size()-1; i < len; i++){ if(N.at(i) <= N.at(i+1)){ result = "No"; break; } } cout<< result << "\n"; }
メモ
- N を文字列として受け取る
解答例2
#include <bits/stdc++.h>usingnamespacestd; intmain(){ int N; cin>> N; string result = "Yes"; vector<int> D; // 10で割った余りを入れるwhile(N > 0){ D.push_back(N%10); N /= 10; } reverse(D.begin(), D.end()); // 配列を反転するfor(int i = 0, len = D.size()-1; i < len; i++){ if(D.at(i) <= D.at(i+1)){ result = "No"; } } cout<< result << "\n"; }
メモ
- N を各桁に分解する
- N>0である間
- Nを10で割った余りを配列の末尾に追加する
- NをN/=10に置き換える
- 配列Dを反転する
- 問題文中の条件をループを使って判定する
- N = 321の場合
vector<int> D = { 1, 2, 3 };
となる- その後、反転して
vector<int> D = { 3, 2, 1 };
となる