题目描述
WP已经隐藏不了自己对
CZ的爱慕之情,终于在
11.10这天向
CZ表达了自己的爱意。
”请做我的好基友
,我愿意一辈子照顾你,我们在一起吧?
”。
CZ笑了笑说,我喜欢高智商的程序员,你能用程序实现我的一个问题我们就在一起。
题目描述如下:
给你n个数(1<= n <= 1000),这个n数的取值范围为[0,n - 1],问任意交换其中两个数所形成的的不同的序列有多少种?
机智的你一定可以帮你的好朋友解决他的终身大事的,加油…….
输入
输入一个数
n,
接下来输入
n
个数。
输出
序列有多少种
示例输入
10 6 6 5 6 5 7 2 5 5 4
示例输出
37
很简单,就是把相同的求他们的组合数再减掉就可以了,最后不要忘了加1,本身也是一种序列。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int n,b[10010],a[10010];
memset(b,0,sizeof(b));
cin>>n;
for(int i=0; i<n; i++)
{
cin>>a[i];
b[a[i]]++;
}
int sum=0;
for(int i=1; i<n; i++)
{
sum+=i;
}
int sum1=0;
for(int i=0; i<n; i++)
{
if(b[i]>=2)
{
sum1+=(b[i]*(b[i]-1))/2;
}
}
printf("%d\n",sum-sum1+1);
return 0;
}