1. 程式人生 > >ACM_夢中的函數

ACM_夢中的函數

color clas 次數 output 不重復 答案 輸入 other name

夢中的函數

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

寒假那段時間,每天刷題的小G連做夢都是代碼,於是有了這道題。
給定一個數組a,求g(a),g(a)=∑( a[i]*f(a[i]) )
其中f(x)表示x在數組a中的出現次數,重復數字不重復計算。

Input:

多組數據輸入(EOF),每組數據第一行是數組a的大小N(1<=N<=10000),第二行是N個數A1到AN(-10000<=Ai<=10000)

Output:

對於每組測試數據,以"ans"=answer的形式輸出答案。

Sample Input:

5
2 23 233 233 2333

Sample Output:

"ans"=2824
解題思路:使用map容器(鍵:某個數字,值:對應數字出現的次數)簡單過,時間復雜度為O(nlogn)。
AC代碼:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 LL ans;int x,n;map<int,int> mp;
 5 int main(){
 6     while(cin>>n){
 7         mp.clear();ans=0;
 8         while(n--){cin>>x;mp[x]++;}
9 for(map<int,int>::iterator it=mp.begin();it!=mp.end();++it) 10 ans+=(it->first)*(it->second);//鍵值的引用 11 cout<<"\"ans\"="<<ans<<endl; 12 } 13 return 0; 14 }

ACM_夢中的函數