Arithmetic Number
問題
E – Arithmetic Number
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…
記録
- 2021/9/30 リスト作成で1WA。実装が遅い。
- 2021/1/8 バーチャル参加。解法を思いつく(遅い)が実装できず。
解法
- 等差数列をあらかじめ作っておく。
- \(X\) で
二分探索
コード例
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; using P = pair<int, int>; #define rep(i, n) for(int i = 0; i < (n); ++i) // using mint = modint998244353; // using mint = modint1000000007; // const int mod = 1000000007; // const ll INF = 1LL << 62; // const int INF = 1001001001; set<ll> f() { set<ll> res; for(int i = 1; i <= 9; ++i) { for(int j = -9; j <= 8; ++j) { string s; int dg = i; for(int k = 0; k < 18; k++) { s.push_back(dg + '0'); res.insert(stoll(s)); dg += j; if(!(0 <= dg && dg <= 9)) { break; } } } } return res; } int main() { ll X; cin >> X; set<ll> st = f(); cout << (*st.lower_bound(X)) << endl; return 0; }