競技プログラミング日記

主に AtCoder の記事です

AtCoder Beginner Contest 255E

 

ABC255E

\(a_{0}\) を決めれば, \(a\) の残りは一意に決まる. \((i,j) \in N \times M\) に対して, \(a_{i} = x_{j}\) となる \(a_{0}\) の条件を, \(x, s\) を用いて表せばよい.

\(a_{0}\) を固定したときに, よい\((i,j\) の組に印をつけていく. 印の個数が最大にするが今回の問題. なぜなら,印がつくのは各\(i\) に対して, \(j\) は高々1個だから. つまり, \(i\) の個数を数えるのと,印の個数を数えるのは同じ.

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

int main() {
  ll n, m;
  cin >> n >> m;
  vll s(n-1); cinv(s);
  vll x(m); cinv(x);


  map<ll,ll> mp;
  rep(j,m){
    ll sig = 1;
    ll t = 0;

    rep(i,n){
      ll z = sig*(x[j] - t);
      mp[z]++;
      if(i == n-1) break;
     
      t = s[i] - t;
      sig *= -1;
    }

  }


 
  ll ans = 0;
  for(auto [_,cnt]: mp){
    chmax(ans, cnt);
  }
  cout << ans << endl;



  return 0;
}