B. The Best Gift
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Emily's birthday is next week and Jack has decided to buy a present for her. He knows she loves books so he goes to the local bookshop, where there are n books on sale from one of m genres.

In the bookshop, Jack decides to buy two books of different genres.

Based on the genre of books on sale in the shop, find the number of options available to Jack for choosing two books of different genres for Emily. Options are considered different if they differ in at least one book.

The books are given by indices of their genres. The genres are numbered from 1 to m.

Input

The first line contains two positive integers n and m (2 ≤ n ≤ 2·105, 2 ≤ m ≤ 10) — the number of books in the bookstore and the number of genres.

The second line contains a sequence a1, a2, ..., an, where ai (1 ≤ ai ≤ m) equals the genre of the i-th book.

It is guaranteed that for each genre there is at least one book of that genre.

Output

Print the only integer — the number of ways in which Jack can choose books.

It is guaranteed that the answer doesn't exceed the value 2·109.

Sample test(s)
input
4 3
2 1 3 1
output
5
input
7 4
4 2 3 1 2 4 3
output
18
Note

The answer to the first test sample equals 5 as Sasha can choose:

  1. the first and second books,
  2. the first and third books,
  3. the first and fourth books,
  4. the second and third books,
  5. the third and fourth books.

记录每个种类的本数,然后两两相乘就好了

#include<stdio.h>
//#include<bits/stdc++.h>
#include<string.h>
#include<iostream>
#include<math.h>
#include<sstream>
#include<set>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<limits.h>
#define inf 0x3fffffff
#define INF 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define ULL unsigned long long
using namespace std;
int i,j;
int t;
int n,m;
int num;
map<__int64,__int64> q;
map<__int64,__int64>::iterator it;
map<__int64,__int64>::iterator itt;
int main()
{
__int64 sum=0;
cin>>n>>m;
for(i=0;i<n;i++)
{
cin>>num;
q[num]++;
}
for(it=q.begin();it!=q.end();it++)
{
for(itt=q.begin();itt!=q.end();itt++)
{
if(it->first!=itt->first)
{
sum+=(it->second)*(itt->second);
}
}
}
cout<<sum/2<<endl;
return 0;
}

  

最新文章

  1. 作业八:团队项目——Alpha阶段项目总结
  2. 在CentOS上搭建svn服务器及注意事项
  3. css3属性column知多少
  4. win8安装mean.io详解
  5. CodeForces250B——Restoring IPv6(字符串处理)
  6. 正则表达式与领域特定语言(DSL)
  7. SQL Server 2008 定时作业的制定
  8. 解决在某些IE浏览器下字符乱码的问题
  9. c++初学(电梯实验加强版)
  10. C# Process.Start()
  11. 【DP】捡苹果
  12. Spark SQL1.2测试
  13. java中的异常类型以及区别????
  14. [逆向工程] 二进制拆弹Binary Bombs 快乐拆弹 详解
  15. 理解npm run
  16. python系统编程(一)
  17. 跨域ajax问题
  18. Node.js实战(五)之必备JavaScript基础
  19. java数据结构之二叉树遍历的非递归实现
  20. 判断android是否是debug

热门文章

  1. 浅析大数据的技术生态圈(Hadoop,hive,spark)
  2. Bootstrap 的 Dropdown
  3. HDU 3001 Travelling (状压DP + BFS)
  4. 《Effective Java》第3章 对于所有对象都通用的方法
  5. Markdown语法简介 | Markdown Tutorial
  6. Android 中 吐司显示不出来的原因分析
  7. 【IMOOC学习笔记】多种多样的App主界面Tab实现方法(一)
  8. Android之九宫格解锁的实现
  9. left join和right join、inner join 区别
  10. 读取url接口数据