Official
A - 倉庫の在庫管理 / Warehouse Inventory Management Editorial
by
A - 倉庫の在庫管理 / Warehouse Inventory Management Editorial
by
physics0523
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
まず、各倉庫の在庫が数列 \(P_i\) として与えられるので、これをそのまま配列として受け取ります。
その後、倉庫 \(U\) から倉庫 \(V\) に在庫を \(W\) 個移動させるということを以下の通りに言い換えます。
- 倉庫 \(U\) から在庫を \(W\) 個減らす。その後、倉庫 \(V\) に在庫を \(W\) 個増やす。
その後、以下の手続きで在庫が最大 (タイブレークは倉庫番号の小さいもの)の倉庫を求めます。
- 最初、暫定的な解を \(x=1\) とする。
- \(i=2,3,\dots,N\) の順に、倉庫 \(x\) より倉庫 \(i\) の方が在庫が多ければ \(x=i\) と更新することを繰り返す。
全ての操作は配列、 for ループ、 if 文の組み合わせで実現できます。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(){
ll n,m;
cin >> n >> m;
vector<ll> p(n+1);
for(ll i=1;i<=n;i++){ cin >> p[i]; }
while(m--){
ll u,v,w;
cin >> u >> v >> w;
p[u]-=w;
p[v]+=w;
}
ll res=1;
for(ll i=2;i<=n;i++){
if(p[res] < p[i]){ res=i; }
}
cout << res << "\n";
return 0;
}
posted:
last update:
