Official

B - Sensor Data Logging Editorial by physics0523


問題文に従って実装すればよいです。

  • 時刻 \(0\) の測定値は必ず保存されるので、その測定値を「保存された値」として時刻 \(0\) の情報を出力する。
  • 時刻 \(i=1,2,\dots,T\) について、以下を繰り返す。
    • 「保存された値」と「現在の測定値」との差の絶対値を計算する。
      • 絶対値を求めるのに、例えば C++ では abs 関数が便利です。また、そのような関数が標準で存在しないとしても \(|a-b| = \max(a,b)-\min(a,b)\) とすることで差の絶対値を取得できます。
    • ふたつの値の差が \(x\) 以上であった場合、現在の測定値を新たに記録し、時刻 \(i\) の情報を出力する。

一連の流れは、 for 文と if 文との組み合わせなどで実現可能です。

実装例 (C++):

#include<bits/stdc++.h>

using namespace std;

int main(){
  int t,x;
  cin >> t >> x;
  int save;
  cin >> save;
  cout << "0 " << save << "\n";
  for(int i=1;i<=t;i++){
    int a;
    cin >> a;
    if(abs(save-a)>=x){
      save=a;
      cout << i << " " << save << "\n";
    }
  }
  return 0;
}

posted:
last update: