题目链接:
Summary
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
Problem Description
Small W is playing a summary game. Firstly, He takes N numbers. Secondly he takes out every pair of them and add this two numbers, thus he can get N*(N - 1)/2 new numbers. Thirdly he deletes the repeated number of the new numbers. Finally he gets the sum of the left numbers. Now small W want you to tell him what is the final sum.
Input
Multi test cases, every case occupies two lines, the first line contain n, then second line contain n numbers a1, a2, ……an separated by exact one space. Process to the end of file.
[Technical Specification]
2 <= n <= 100
-1000000000 <= ai <= 1000000000
[Technical Specification]
2 <= n <= 100
-1000000000 <= ai <= 1000000000
Output
For each case, output the final sum.
Sample Input
4
1 2 3 4
2
5 5
Sample Output
25
10
题意:
求生成的数的和,重复的去掉;
思路:
水题;
AC代码:
#include <bits/stdc++.h> using namespace std; const int N=3e5+4; typedef long long ll; int n,a[103]; queue<int>qu; map<int,int>mp; int main() { while(scanf("%d",&n)!=EOF) { ll ans=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { mp[a[i]+a[j]]=0; qu.push(a[i]+a[j]); } } while(!qu.empty()) { int fr=qu.front(); qu.pop(); if(mp[fr]==0)ans+=fr,mp[fr]=1; } printf("%lld ",ans); } return 0; }