第三回 アルゴリズム実技検定 O問題 - 輪投げ

Source

第三回 アルゴリズム実技検定
問題文

問題概要

省略

解法

省略

cLayversion 20201229-1)のコード

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

int N, M, R[3];
ll A[500], B[500];

ll gain(int i, int j){
  ll res = A[j] * B[j];
  rep(i) res *= B[j];
  return res % R[i];
}

ll lost(int i, int j){
  ll res = A[j] * B[j], tmp = A[j];
  if(i==0) return res;
  rep(i) (res, tmp) *= B[j];
  return res - tmp;
}

{
  int node, st, ed, flow;
  ll cost;
  minCostFlow<int,ll> f;
  rd(N,M,A(N),B(N),R(3));

  node = 4 * N + 3;
  st = node++;
  ed = node++;
  f.malloc(node);
  f.init(node);
  rep(i,3) f.addEdge(st, 4*N+i, M, 0);
  rep(i,3) rep(j,N) f.addEdge(4N+i, i*N+j, 1, 0);
  rep(i,3) rep(j,N) f.addEdge(i*N+j, 3*N+j, 1, -gain(i,j));
  rep(i,3) rep(j,N) f.addEdge(3*N+j, ed, 1, lost(i,j));
  f.solve(st, ed, flow, cost);
  wt(-cost);
}

Current time: 2021年09月28日22時25分11秒
Last modified: 2021年01月02日17時05分31秒 (by laycrs)
Tags: Competitive_Programming_Incomplete AtCoder
トップページに戻る

Logged in as: unknown user (not login)

ログイン: