Yandex.Algorithm 2020 Final E問題 - Easy as ABC

Source

Yandex.Algorithm 2020 Final
終了後に提出できるコンテスト
問題文

問題概要

省略

解法

省略

cLayversion 20201102-1)のコード

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

int N;
char S[5d5+2];
double a[5d5+2], c[5d5+2], t[1d6+2];
{
  int block = 5000, st, ed, i, j, len;
  ll res = 0, m;
  rd(S@N);

  rep(st,0,N,block){
    ed = min(st+block, N);
    len = min(st, N-ed) + block;
    rep(i,len) a[i] = c[i] = 0;
    rep(i,len) if(st-len+i >= 0 && S[st-len+i]=='a') a[i]++;
    rep(i,len) if(st-len+i >= 0 && S[st-len+i]=='A') a[i]+=2;
    rep(i,len) if(ed+i < N && S[ed+i]=='c') c[i]++;
    rep(i,len) if(ed+i < N && S[ed+i]=='C') c[i]+=2;
    convolution(a, len, c, len, t, 2*len);
    rep(i,st,ed) if(S[i]=='b' && 0 <= 2*i+len-st-ed < 2*len) res += round(t[2*i+len-st-ed]);
    rep(i,st,ed) if(S[i]=='B' && 0 <= 2*i+len-st-ed < 2*len) res += 2*round(t[2*i+len-st-ed]);

    rep(i,st,ed) if(S[i]=='b' || S[i]=='B'){
      for(j=1;;j++){
        if(i-j < 0 || i+j >= N) break;
        if(i-j < st && i+j >= ed) break;
        if(S[i-j]!='a' && S[i-j]!='A') continue;
        if(S[i+j]!='c' && S[i+j]!='C') continue;
        m = 1;
        if(S[i]=='B') m*=2;
        if(S[i-j]=='A') m*=2;
        if(S[i+j]=='C') m*=2;
        res += m;
      }
    }
  }
  wt(res);
}

Current time: 2024年03月29日21時26分31秒
Last modified: 2020年11月08日09時16分07秒 (by laycrs)
Tags: Competitive_Programming_Incomplete Yandex_Algorithm
トップページに戻る

Logged in as: unknown user (not login)

ログイン: