【AtCoder】ABC 481 B - Polyline

B - Polyline
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
AtCoder
実行時間制限: 2 sec / メモリ制限: 1024 MiB / Difficulty: 78 / NoviSteps: 5Q / 配点: 200 点
問題概要
平面上に 個の点があり、点 の座標は である。
について点 と点 を線分で結び、 本の折れ線を作る。
この折れ線上(端点も含む)にある点のうち、 座標が であるものの個数を求めよ。
ただし、制約より条件を満たす点の個数は有限であることが保証される。
制約
- 入力される値はすべて整数
考察
頂点が に一致する場合と、線分の内部で を横切る場合を分けて数える。
前者は単純に となる の個数を数えればよい。
後者については、 または となる の個数を数えればよい。
実装例
CPP
1.#include <bits/stdc++.h>2.using namespace std;3. 4.#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)5. 6.// ======================================== //7. 8.int main()9.{10. int N, K;11. cin >> N >> K;12. vector<int> A(N);13. rep(i, 0, N) cin >> A[i];14. 15. int ans = 0;16. rep(i, 0, N) {17. if (A[i] == K) ans++;18. }19. 20. rep(i, 0, N - 1) {21. if ((A[i] < K && K < A[i + 1]) || (A[i] > K && K > A[i + 1])) {22. ans++;23. }24. }25. 26. cout << ans << endl;27. 28. return 0;29.}https://atcoder.jp/contests/abc481/submissions/80307302
atcoder.jp
実装時間: 5 分
コメント
綺麗に書こうとしたら逆に時間かかってしまった。





