梦中的函数
Time Limit: 2000/1000ms (Java/Others)
Problem Description:
寒假那段时间,每天刷题的小G连做梦都是代码,于是有了这道题。
给定一个数组a,求g(a),g(a)=∑( a[i]*f(a[i]) )
其中f(x)表示x在数组a中的出现次数,重复数字不重复计算。
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 }