3 条题解

  • 1
    @ 2023-5-2 11:20:03
    #include<cstdio>
    using namespace std;
    int t[200005],g[200005];//t是桶,t[i]表示值为i的数在集合中两两相加出现了几次,g[i]表示值为i的数是否在集合中,1为在,0为不在
    int n,a[105],ans;
    int main(){
        cin>>n;
        for (int i=1;i<=n;i++){
            cin>>a[i];//读入
            g[a[i]]=1;//在集合中赋值为1
        }
        for (int i=1;i<n;i++){//枚举
            for (int j=i+1;j<=n;j++){
                t[a[i]+a[j]]++;//被加出来了
            }
        }
        for (int i=1;i<=200002;i++){
            if (t[i]>0&&g[i]) ans++;//判断是否满足,满足ans++
        }
        cout<<ans<<endl;
        return 0;
    }
    
    
    • 0
      @ 2024-6-13 21:28:06
      #include <bits/stdc++.h>
      using namespace std;
      int a[110],r[20010];
      int n,m,cnt;
      int main(){
      	scanf("%d",&n);
      	for(int i=1;i<=n;i++){
      		scanf("%d",&a[i]);
      		r[a[i]]=1;
      	}
      	for(int i=1;i<=n;i++){
      		for(int j=i+1;j<=n;j++){
      			if(r[a[i]+a[j]]==1){
      				cnt++;
      				r[a[i]+a[j]]=0;
      			}
      		}
      	}
      	printf("%d",cnt);
      	return 0;
      }
      
      
      • 0
        @ 2023-10-28 19:22:34
        #include <iostream>
        using namespace std;
        int n,a[105],ans;
        bool g[200005],t[200005];
        int main(){
            cin>>n;
            for(int i=1;i<=n;i++){cin>>a[i];g[a[i]]=true;}
            for(int i=1;i<n;i++)for(int j=i+1;j<=n;j++)t[a[i]+a[j]]=true;
            for(int i=1;i<=200002;i++)if(t[i]&&g[i])ans++;
            cout<<ans<<endl;
            return 0;
        }
        
        
        
        • 1

        信息

        ID
        591
        时间
        1000ms
        内存
        128MiB
        难度
        5
        标签
        递交数
        101
        已通过
        37
        上传者