【CUGBACM15级BC第8场 A】hdu 4989 Summary

xiaoxiao2021-02-28  109

Summary

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1135    Accepted Submission(s): 599 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   Output For each case, output the final sum.   Sample Input 4 1 2 3 4 2 5 5   Sample Output 25 10 Hint Firstly small W takes any pair of 1 2 3 4 and add them, he will get 3 4 5 5 6 7. Then he deletes the repeated numbers, he will get 3 4 5 6 7, Finally he gets the sum=3+4+5+6+7=25.  

题目大意:给定一个集合,从中任选两个数求和,要求输出所有组成可能的和(相同算一种)

解题思路:枚举两个数,用set去重后求和

#include <iostream> #include <set> #include <map> #include <stack> #include <cmath> #include <queue> #include <cstdio> #include <bitset> #include <string> #include <vector> #include <iomanip> #include <cstring> #include <algorithm> #include <functional> #define PI acos(-1) #define eps 1e-8 #define inf 0x3f3f3f3f #define debug(x) cout<<"---"<<x<<"---"<<endl typedef long long ll; using namespace std; long long a[110]; set<long long> gg; set<long long>::iterator iter; int main() { int n; while (~scanf("%d", &n)) { gg.clear(); for (int i = 0; i < n; i++) { scanf("%lld", &a[i]); } for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { int xx = a[i] + a[j]; gg.insert(xx); } } ll ans = 0; for (iter = gg.begin(); iter != gg.end(); iter++) { ans += *iter; } cout << ans << endl; } return 0; }
转载请注明原文地址: https://www.6miu.com/read-53633.html

最新回复(0)