キーエンス2020

[A][C]の2完だった. 最近だとAGC41と第6回ドワンゴも出たけど,修論で忙しくてブログを書いていなかった.そのうち覚えてる範囲で書きたい(まあ全然解けなかったんだけど)

[B]

初めpairとしてソートすれば良いことに気づかなくてアレだった.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
     
int main(void){
  int N;
  cin >> N;
  vector<pair<long long, long long>> vs(N);
  for(int i = 0; i < N; i++){
    cin >> vs.at(i).first >> vs.at(i).second;
  }
  sort(vs.begin(), vs.end());
      
  int ans = 1;
  long long edge = vs.at(0).first + vs.at(0).second; // -1してた
  for(int i = 1; i < N; i++){
    long long right_edge = vs.at(i).first + vs.at(i).second; // -1してた
    long long left_edge = vs.at(i).first - vs.at(i).second; // +1してた
    if(edge > right_edge){
      edge = right_edge;
      continue;
    }else if(edge <= left_edge){
      ans++;
      edge = right_edge;
    }
  }
  
  cout << ans << endl;
}

終わった後にこれでACになったけど,問題文が曖昧だと思った.時間中はコメントしたように提出して一生WAになってた.問題文は

ただし、各 i (1≤i≤N) に対して、 ロボット i の腕が動く範囲とは  
数直線上の座標が X_i−L_i より大きく X_i+L_i 未満の部分を指します。

と言ってるんだから,素直に読んだら腕の長さはL_i-1になると思うんだけど…