你非常喜欢 200 这个数字。 现在你的面前出现了一个长度为 n 的序列 a,你想要知道,一共有多少对 (i,j) 满足:
对于 60% 的数据,?≤1000。
对于 100% 的数据,?≤2×105,∣ai∣≤109。
#include <bits/stdc++.h>
#define _all(i, a, b) for(int i = (a); i <= (b); i ++)
using namespace std;
int main(){
unordered_map<int, int> Bac;
int n, maxi = -2e9; cin >> n;
vector<int> A(n + 1); _all(i, 1, n) cin >> A[i], Bac[A[i]] = i, maxi = max(A[i], maxi);
// timespec start;
// clock_gettime(CLOCK_MONOTONIC, &start);
int ans = 0;
_all(i, 1, n)
for(int j = A[i]; j <= maxi; j += 200)
if(Bac[j] > 0 and Bac[j] != i)
ans ++;
// timespec end;
// clock_gettime(CLOCK_MONOTONIC, &end);
// double duration = (double)(end.tv_nsec-start.tv_nsec)/((double) 1e9) + (double)(end.tv_sec-start.tv_sec);
printf("%d", ans);
return 0;
}
本来打算卡过去的, 但TLE了, 求思路!