公式
B - Reverse Proxy 解説
by
B - Reverse Proxy 解説
by
physics0523
\(X_i \ge 1\) である場合、箱 \(X_i\) にそのボールを入れます。
\(X_i = 0\) である場合、 for 文を用いることでどの箱にボールを入れるべきかを判定できます。
どの箱にボールを入れべきかが分かれば、後は \(X_i \ge 1\) である場合と同様の処理で箱にボールを入れればよいです。
\(X_i \ge 1\) であれば定数回の処理、 \(X_i = 0\) であれば \(O(N)\) 回程度の処理であるため、全体の時間計算量は \(O(NQ)\) となります。
実装例 (C++):
#include<bits/stdc++.h>
using namespace std;
int main(){
int N,Q;
cin >> N >> Q;
vector<int> bk(N+1,0);
for(int i=0;i<Q;i++){
if(i){cout << " ";}
int X;
cin >> X;
if(X>=1){
bk[X]++;
cout << X;
}
else{
int y=1;
for(int j=2;j<=N;j++){
if(bk[y]>bk[j]){ y=j; }
}
bk[y]++;
cout << y;
}
}
cout << "\n";
return 0;
}
Bonus! この問題を時間計算量 \(O(N+Q)\) で解いてみましょう。
投稿日時:
最終更新: