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;
}

P2118 [NOIP2014 普及组] 比例简化

P2239 [NOIP2014 普及组] 螺旋矩阵

P2258 [NOIP2014 普及组] 子矩阵

posted @ 2022-10-21 11:43  HelloHeBin  阅读(139)  评论(0)    收藏  举报