#include #include #include #include using namespace std; int main() { for(int M,N; cin>>M>>N,M|N;) { // blank line between test cases... static bool first=true; if(first) first=false; else cout< send(M,0), recv(M,7*N); // 入力: 通信遅延 vector delay(M); for(int i=0; i> delay[i]; // 各もんだいごとに… for(int i=0; i arrival[20]; // id => length_of_answer // 入力: 回答送信 // クライアントの送信データ量はここでわかる // あと、[0..1000), [1000..2000), ... [19000..20000) のどのポーリング区間に // サーバーに回答が到達するかをとりあえず表としてもっておく int L; cin >> L; for(int i=0; i> P >> T >> A; send[P] += 5 + A.size(); arrival[ (T+delay[P]*2)/1000 ][P] = A.size(); } // 20ステップをシミュレート map answered; for(int t=0; t<20; ++t) if( !arrival[t].empty() ) { answered.insert( arrival[t].begin(), arrival[t].end() ); // 各クライアントごとの送信量を計算 for(int p=0; p::iterator it = answered.begin(); it != answered.end(); ++it) if( p != it->first ) recv[p] += 2 + it->second; } else { // とっくに回答済み: 今回来た分を送る recv[p] += 4; for(map::iterator it = arrival[t].begin(); it != arrival[t].end(); ++it) recv[p] += 2 + it->second; } } } } // 出力 cout << accumulate(recv.begin(), recv.end(), 0) << " " << accumulate(send.begin(), send.end(), 0) << endl; for(int i=0; i