AT_abc402_d 题解
思路
首先可以发现转化,答案也就等于每个
接下来我们需要考虑如何去求这个东西。通过对样例解释的观察与一些手玩,可以发现
这就结束了吗?并没有。例如,如果
好麻烦!这不仅需要经过大量分讨,并且也没法在时间限制下实现。
进一步观察上式,如果从两对点的和入手,事情是不是就无比简单了?只有两种情况,两对点的和相等或差
开一个 map,每次将
AC code
#include<bits/stdc++.h>
using namespace std;
long long n,m,sum;
map<long long,long long>ji;
int main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=m;i++){
long long a,b;
scanf("%lld%lld",&a,&b);
sum+=ji[a+b]+ji[a+b+n]+ji[a+b-n];//真的不会算重!因为边是按顺序加的。
ji[a+b]++;
}
printf("%lld",m*(m-1)/2-sum);
}