好元素

【问题描述】

小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. 卡特兰数(Catalan)

    卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 2, ...

  2. Eclipse设置黑色主题

    1点击help--->install new software 2输入 http://eclipse-color-theme.github.com/update 3下载安装eclipse col ...

  3. windows 上vmare超卡的问题解决方案

    http://www.cnblogs.com/jlwen/p/3553722.html

  4. Tomcat的设定

    tomcat 版本  apache-tomcat-7.0.68-windows-x64 1.解压文件到 eclipse文件夹中,这个放哪都可以,个人习惯而已 2.tomcat目录结构 图片为盗图- 3 ...

  5. 在一个aspx或ashx页面里进行多次ajax调用

    在用ajax开发asp.net程序里.利用ashx页面与前台页面进行数据交互.但是每个ajax交互都需要一个ashx页面.结果是项目里一大堆ashx页面.使项目难以管理.现在我们就想办法让一个ashx ...

  6. thinkpad W500S 如何换键盘?

    tHINKPAD的笔记本拆装有,123456789... 至少5种以上了,一般键盘去下都是边上撬就去下 来了.今天拆换W550S键盘就遇到劲敌了.拼了 老劲也去不下,冬天背上都冒汗(屋子热的吧). 终 ...

  7. Nodejs实现简单的反向代理

    var http = require('http'), httpProxy = require('http-proxy'); // 新建一个代理 Proxy Server 对象 var proxy = ...

  8. Java注解基础概念总结

    注解的概念 注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能够调用Annotations.注解与类.接口.枚举在同一个层次 ...

  9. ajax用get刷新页面元素在IE下无效解决~~

    总结一下解决办法: 在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回上一次的结果,造成混乱,[即get方式时,获取数据,因发送参数和地址都一致,故IE浏览器会从缓存中取,而不会去请求服务器端 ...

  10. 五星评分效果 原生js

    五星评分在很多地方都可以用到,网上也有插件或者相应的代码,在这里我给大家提供一款我自己写的超级简单实用的五星评分代码,连图片都不需要 <!-- 评分start --> <ul> ...