求思路
  • 板块灌水区
  • 楼主_FarmerJohn_
  • 当前回复6
  • 已保存回复6
  • 发布时间2024/7/31 19:04
  • 上次更新2024/7/31 20:25:00
查看原帖
求思路
628365
_FarmerJohn_楼主2024/7/31 19:04

魔数

你非常喜欢 200 这个数字。 现在你的面前出现了一个长度为 nn 的序列 aa,你想要知道,一共有多少对 (i,j)(i,j) 满足:

  • 1≤i<j≤n1≤i<j≤n
  • ai−??a_i - ?_?是 200 的倍数。

对于 60%60\% 的数据,?≤1000? \leq 1000。
对于 100%100\% 的数据,?≤2×105,∣ai∣≤109? \leq 2 \times 10^5, |a_i| \leq 10^9。

求思路

#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了, 求思路!

2024/7/31 19:04
加载中...