公式

D - コンテスト / Contest 解説 by physics0523


この問題は、 2 回の for ループで解くことができます。

  • \(1\) 度目の for ループで、 \(1\) 位のチームを求める。
  • \(2\) 度目の for ループで、 \(G_i\) を出力する。

\(1\) 位のチームを求める際は、暫定 \(1\) 位のチームと今着目しているチームとを条件分岐を利用して比較し、順位が上であるほうを新たに暫定 \(1\) 位のチームにするということを繰り返せば良いです。

\(G_i\) の出力の際は問題文中の式に従って計算して出力すればよいです。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  int n,t;
  cin >> n >> t;
  int top=0;
  vector<int> a(n),b(n);
  for(int i=0;i<n;i++){
    cin >> a[i] >> b[i];
    if(a[top]<a[i] || (a[top]==a[i] && b[top]>b[i])){
      top=i;
    }
  }
  for(int i=0;i<n;i++){
    cout << t*(a[top]-a[i])+(b[i]-b[top]) << "\n";
  }
  return 0;
}

投稿日時:
最終更新: