本文主要是介绍基友记 SDUT 2189,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
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;
}
这篇关于基友记 SDUT 2189的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!