题目链接:https://open.kattis.com/problems/aplusb
题意:给你一堆数,然后求ai+aj=ak的组成的**(i,j,k)对有多少个**,并且保证i,j,k小标互不相同。
个人感想:
最近在练FFT自己敲的一道题,马蛋数组开小了无限wa了好多次…
首先我们先明确num【k】代表值(i,j)=k的个数,
然后将a[i]+a[i]的那种重复的去掉.
然后再通过再以 a[i]为尾节点k的(i,j,k)有多少种.很明显就是 num【a[i]】种啊,可是有一种情况在于0,因为有可能会自己加了0也等于a[i]所以的特殊处理处0有多少个,减了0就可以了,而且记住,这个(i,j)也是有顺序要求的,(i,j)和(j,i)是2个不同的,所以我们得处理0的时候*2倍.
然后是因为有负数,我们要+M=50000来处理一下就好了.
分析:fft
代码:
/* Author:GavinjouElephant
* Title:
* Number:
* main meanning:
*
*
*
*/
#include
using namespace std;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include