競技プログラミング日記

主に AtCoder の記事です

AtCoder Beginner Contest 234E

ABC234E

\(x\) 以上の最小の等差数を求めるのであるが, まず候補の範囲を考える. \(99\cdots9\) は等差数なので, \(x\) と同じ桁数だけで十分.
よって全探索できる. 先頭から決めて行けば良い. 小さい等差数から調べていく.

使っている記号,マクロ等 "https://ecsmtlir.hatenablog.com/entry/2022/12/23/131925"

int main() {
  ll x; cin >> x;
  ll dx = 0;
  ll cx = x; // 後で x を使うのでコピーする
  while(cx) {
    dx++;
    cx /= 10;
  }
 
  srep(a,1,10){
    srep(e,-9, 10){
      bool f = true;
      ll y = 0;
      ll c = a;

      rep(i,dx){
        if(!in(c,10LL)) f = false;
        y = 10*y + c;
        c += e;
      }
      if(f && y >= x) {
        cout << y << endl;
        return 0;
      }

    }
  }
  assert(false);
   

  return 0;
}