【AtCoder】ABC 417 C - Distance Indicators | 緑コーダーが解くAtCoder
配点: 300 点 / 実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 246 / NoviSteps: 2Q
問題概要
長さ の整数列
が与えられる。2整数の組
のうち、
を満たすものの個数を求めよ。
制約
- 入力はすべて整数
考察
例によって の組を愚直に調べていくことはできない。
ここで、条件式を
のように、添字をそろえるように変形してみる。
すると、各 に対して、
を満たす
について、
を満足する個数を求めればよいことになる。
この個数は、あらかじめmapで の個数を記録しておくことで高速に求めることができる。
全体の計算量は となり、本問の制約下では十分高速。
実装例
#include <bits/stdc++.h> using namespace std; #define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++) using ll = long long; // ======================================== // int main() { int N; cin >> N; map<int, int> mp; ll ans = 0; rep(j, 0, N) { int A; cin >> A; ans += mp[j - A]; mp[A + j]++; } cout << ans << endl; return 0; }
実装時間: 10分
コメント
インデックスを揃えるような式変形は割と頻出。