luogu part 1.2 珠心算测验 (数组基础)

P2141

first
时间复杂度 N²
空间复杂度 N+2K

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int num[20009],s[110];
int main(){
    
    
	int n;
	cin>>n;
	memset(num,0,sizeof(num));
	for(int i=0;i<n;i++){
    
    
		int x;
		scanf("%d",&x);
		num[x]=1;
		s[i]=x;
	}
	int sum=0;
	for(int i=0;i<n;i++){
    
    
		for(int j=i+1;j<n;j++){
    
    
			if(num[s[i]+s[j]]==1)sum++,num[s[i]+s[j]]++;
		}
	}cout<<sum;

	return 0;
	
}



second
时间复杂度 N²logN
空间复杂度 2N

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
set<int> num;//查找集合 
set<int> res;//去重集合 
int a[110];
int main(){
    
    
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
    
    
		cin>>a[i];
		num.insert(a[i]);
	} for(int i=1;i<=n;i++){
    
    
		for(int j=i+1;j<=n;j++){
    
    
			int tmp=a[i]+a[j];
			set<int>::iterator it =num.find(tmp);
			if(it!=num.end()){
    
    
				res.insert(*it);
			}
		}
	}cout<<res.size();

	return 0;
	
}

猜你喜欢

转载自blog.csdn.net/Minelois/article/details/113706215