好元素

【问题描述】

小A一直认为,如果在一个由N个整数组成的数列{An}中,存在以下情况:

Am+An+Ap = Ai (1 <= m, n, p < i <= N ,  m,n,p可以相同),那么Ai就是一个好元素。

现在小A有一个数列,请你计算数列中好元素的数目。

【输入格式】

第一行只有一个正整数N,意义如上。

第二行包含N个整数,表示数列{An}。

【输出格式】

输出一个整数,表示这个数列中好元素的个数。

【输入样例】

Sample1

2

1 3

Sample2

6

1 2 3 5 7 10

Sample3

3

-1 2 0

【输出样例】

Sample1

1

Sample2

4

Sample3

1

【数据范围】

对于10%的数据1<=N<=10

对于40%的数据1<=N<=500 -10^5<=Ai<=10^5

对于70%的数据1<=N<=5000 -10^6<=Ai<=10^6

对于100%的数据1<=N<=5000 -10^9<=Ai<=10^9

————————————分割线————————————

10% n^4 随便做。

40% n^3 用布尔数组保存存在的元素,用三层枚举a[i],a[j],a[k],如果a[i]+a[j]+a[k]存在,那么答案加1。注意枚举顺序和判重。

70% n^2 预处理两个数的和,再枚举,因为每一个元素值比较小,开一个数组来存储是否存在。(其实n^3的方法加上剪枝也可以过)

100% n^2 因为元素的值比较大,在70%的思想上用哈希进行判断即可。

拉链法Hash即可。

 #include "cstdio"
#include "cstring"
#include "algorithm"
#include "iostream"
#include "fstream"
#include "stack"
#include "set"
#include "queue"
#include "deque"
#include "ctime"
#include "cstdlib"
#include "sstream"
#include "cctype"
#include "cmath" using namespace std ;
const int MOD = ;
const int maxN = 5e3 + 1e2 ;
const int _max_ = 5e7 + 1e2 ;
typedef long long QAQ ; int cnt ;
int Next[ MOD << ] , Head[ MOD << ] , End[ MOD << ] ;
int A[ maxN ] ; inline int INPUT ( ) {
int x = , f = ; char ch = getchar ( ) ;
while ( ch < '' || '' < ch ) { if ( ch == '-' ) f = - ; ch = getchar ( ) ; }
while ( '' <= ch && ch <= '' ) { x = ( x << ) + ( x << ) + ch - '' ; ch = getchar ( ) ; }
return x * f ;
} inline int Hash_Function ( int x ) {return ( ( x % MOD ) + MOD ) % MOD ; }//散列函数 inline bool Find ( const int tmp ) {
int pos = Hash_Function ( tmp ) ;
int y ;
for ( int i=Head[ pos ] ; y = End[ i ] , i ; i = Next[ i ] ) {//查找
if ( y == tmp ) return true ;
}
return false ;
} inline void Hash_Link ( const int tmp , const int pos ) {//用链表拉链
Next[ ++cnt ] = Head[ pos ] ;
Head[ pos ] = cnt ;
End[ cnt ] = tmp ;
} inline void Hash_Add ( const int tmp ) {
int pos = Hash_Function ( tmp ) ;
int y ;
for ( int i=Head[ pos ] ; y = End[ i ] , i ; i = Next[ i ] ) {
if ( y == tmp ) return ; //判重
}
Hash_Link ( tmp , pos ) ;
} int main ( ) {
freopen ( "good.in" , "r" , stdin ) ;
freopen ( "good.out" , "w" , stdout ) ;
int N = INPUT ( ) ;
QAQ Ans = ;
for ( int i= ; i<=N ; ++i ) {
A[ i ] = INPUT ( ) ;
for ( int j= ; j<i ; ++j ) if ( Find ( A[ i ] - A[ j ] ) ) { ++Ans ; goto Loop ; }
Loop :
for ( int j= ; j<=i ; ++j ) Hash_Add ( A[ i ] + A[ j ] ) ;
}
//cout << endl ;
cout << Ans << endl ;
return ;
}

2016-10-24 15:04:28

20161022 NOIP模拟赛 解题报告的更多相关文章

  1. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  2. 9月24日noip模拟赛解题报告

    1.校门外的树(tree.c/cpp/pas 128M,1s) Description LSGJ扩建了,于是校门外有了一条长为L的路.路上种了一排的树,每相邻两棵树之间的距离为1,我们可以把马路看成一 ...

  3. 2018-11-1 NOIP 模拟赛解题报告

    T1 Domino 多米诺骨牌 题目大意 给你N个骨牌,上下各有一个数,要使上面一排的和为偶数,同时下面一排的和也为偶数,最多要翻转多少次?如果无法达成那么输出-1. 解法 水题秒切 根据数的奇偶性质 ...

  4. 2015-9-13 NOIP模拟赛解题报告(by hzwer)

    小奇挖矿 「题目背景」 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞过喵星系的n个星球. 「问题描述」 星球分为2类:资源型和维修型. 1.资源型:含矿物质量a[i ...

  5. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

  6. 2017.9.17校内noip模拟赛解题报告

    预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Ti ...

  7. 10.30 NFLS-NOIP模拟赛 解题报告

    总结:今天去了NOIP模拟赛,其实是几道USACO的经典的题目,第一题和最后一题都有思路,第二题是我一开始写了个spfa,写了一半中途发现应该是矩阵乘法,然后没做完,然后就没有然后了!第二题的暴力都没 ...

  8. 2018.10.26NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 70\) 实际得分:\(40 + 100 + 70\) 妈妈我又挂分了qwq..T1过了大样例就没管,直到临考试结束前\(10min\)才发现大样例是假 ...

  9. 2018.10.17NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 +100\) 实际得分:\(100 + 100 + 60\) 辣鸡模拟赛.. 5min切掉T1,看了一下T2 T3,感觉T3会被艹爆因为太原了.. 淦了20 ...

随机推荐

  1. (转)实现DataList的分页 新增列

    前几天在做网上商城,要展示商品信息(有图片,有文字),DataView虽然可以分页,但它的缺点是不能自定义显示格式.而DataList解决了它的缺点,但DataList本身却不能分页.很是头痛,于是在 ...

  2. 解决JSP页面获取的数据库数据乱码问题

    将java项目部署到服务器,页面数据乱码: 解决:首先查看了数据库编码和jsp编码都是utf-8,说明jsp和数据库没问题,于是查看了tomcat设置的编码 没有设置编码,于是加了URIEncodin ...

  3. liniux mint android-ndk风波

    我的安装过程sudo chmod a+x android-ndk-r10d-linux-x86_64.bin/dowonload $ ./android-ndk-r10d-linux-x86_64.b ...

  4. rpcbind服务说明及关闭

    rpcbind服务说明及关闭 Posted by 破冰 on -- : Tuesday rpcbind服务停止命令 service portmap stop redhat 的rpc.statd服务: ...

  5. Lambda 表达式[MSDN]

    Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.Lambda 表达式对于编写 LINQ 查 ...

  6. docker容器与容器云读书笔记1

    搭建docker应用栈 操作系统: ubuntu 16.04.1 LTS 桌面版 1. 准备工作 换网易源, gedit 会报一个metadata的告警, 不用理会, sudo apt-get upd ...

  7. Redis的入门及注意事项

    1.redis简介 Remote Dictionary Server Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中, ...

  8. Linux 搭建Java web服务器

    未经允许,不得转载 1.jdk的下载与配置 1.1下载 sudo wget http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45- ...

  9. CDQ学习笔记

    CDQ三维偏序 给出n个点(x,y,z) 每个点求出x'<=x,y'<=x,z'<=x的点(x',y',z')有多少个 第一维 快排 第二维 CDQ 第三维 树状数组 CDQ 先按x ...

  10. 同一行多个div宽度自适应布局

    主要运用到的是:布局神器display:table-cell 元素两端对齐 第一个案例是让两个元素分别向左和向右对齐,如果是过去,我一定会用float来实现,但其实用table可以这么做: 自动平均划 ...