😽

ABC353D

に公開

問題

ABC353D

解法

桁の問題なので,A は reverse しておく.

f(x,y)x を左の桁, y を右の桁と呼ぶ.
左の桁 x を固定したとき,y の取り方によって,何桁シフトするかが変わる.
実際,y の桁だけシフトすればよい.
右の桁 y を固定したとき,x の取り方によらず,桁はシフトする必要がない.

コード

main.cpp
ll keta(ll n){
  ll k = 0;
  while(n){
    n /= 10;
    k++;
  }
  return k;
}

int main() {
  ll n;
  cin >> n;
  vll a(n); rep(i,n) { cin >> a[i]; }
  reverse(all(a));

  mint ans;
  mint s = 0;
  rep(i,n){
    ans += s * a[i];
    s += mint(10).pow(keta(a[i]));
  }

  rep(j,n){
    ans += mint(a[j]) * mint(n-1-j);
  }

  cout << ans.val() << endl;

  return 0;
}

Discussion