目录
- P2141 [NOIP2014 普及组] 珠心算测验
- P2118 [NOIP2014 普及组] 比例简化
- P2239 [NOIP2014 普及组] 螺旋矩阵
- P2258 [NOIP2014 普及组] 子矩阵
题目传送
- P2141 [NOIP2014 普及组] 珠心算测验
- P2118 [NOIP2014 普及组] 比例简化
- P2239 [NOIP2014 普及组] 螺旋矩阵
- P2258 [NOIP2014 普及组] 子矩阵
P2141 [NOIP2014 普及组] 珠心算测验
- 题目有点坑:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
- 每个数只需要计算一次,或许有多种组合,但是无需多次计算。
- 数据范围:3≤n≤100,a[i]≤10000
- 可以直接暴力,三重循环。
- 也可以打标记,res[i] 表示和为 i 的数是否存在,需要注意多开空间。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e4+10,INF=0x3f3f3f3f;
int n,a[N],ans=0,res[N];
void slove1(){
for(int i=1; i<=n; i++){
int flag=0;
for(int j=1; j<=n; j++){
for(int k=1; k<=n; k++){
if(i!=j && j!=k && a[i]==a[j]+a[k]){
flag=1; break;
}
}
if(flag) break;
}
ans+=flag;
}
}
void slove2(){
for(int i=1; i<=n; i++)
for(int j=1; j<i; j++) res[a[i]+a[j]]=1;
for(int i=1; i<=n; i++) ans+=res[a[i]];
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) cin>>a[i];
slove1();
// slove2();
cout<<ans;
return 0;
}