AtCoder Grand Contest 039 C問題 - Division by Two with Something

Source

AtCoder Grand Contest 039
問題文

問題概要

省略

解法

省略

cLayversion 20191006-1)のコード

C++に変換後のコードはこちら

#define MD 998244353
int N;
char X[200002];
mint cnt[1d4]; int y[1d4], sz;
{
  int i, j, k, d;
  mint res;
  rd(N,X);
  rep(i,N) X[i] -= '0';

  REP(k,1,N+1) if(N % k == 0 && (N / k) % 2 == 1){
    y[sz] = k;
    d = gcd(N, 2k);
    rep(i,d) cnt[sz] = 2 cnt[sz] + X[i];
    cnt[sz] += 1;
    rep(i,d,N){
      j = 1 - X[i-d];
      if(j > X[i]) cnt[sz] -= 1, break;
      if(j < X[i]) break;
    }
    sz++;
  }

  rep(i,sz) rep(j,i) if(y[i] % y[j] == 0) cnt[i] -= cnt[j];

  res = 0;
  rep(i,sz) res += 2 * y[i] * cnt[i];

  wt(res);
}

Current time: 2021年09月28日22時09分45秒
Last modified: 2019年10月06日04時49分29秒 (by laycrs)
Tags: Competitive_Programming_Incomplete AtCoder AtCoder_Grand_Contest AGC039 AGC_C
トップページに戻る

Logged in as: unknown user (not login)

ログイン: