Codeforces #261 Div 2 B

来源:互联网 发布:windows快捷键设置 编辑:程序博客网 时间:2024/06/06 00:09

题目大意:

给定一段序列,求出的序列的最大差值和组成这段差值的组合数量。

题目分析:

想想自己真的是缺少比赛的经验,神奇地ce了几次,想到大致算法却忽略了小细节。


这道题其实很好,考验对数据的处理,首先是排序,然后分类讨论

1、*  如果数据全都相同,那么就考虑N个数相互组合的可能数量。即n*(n-1)/2

2 、   否则的话直接乘法原理。

还有一个问题就是,数据的大小。

N的数量是2*10^5级的,相乘的话可能爆int,所以要注意long long'

如下代码:

#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;int n;int a[200010];int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1);long  long s1=upper_bound(a+1,a+n+1,a[1])-lower_bound(a+1,a+n+1,a[1]);long  long s2=upper_bound(a+1,a+n+1,a[n])-lower_bound(a+1,a+n+1,a[n]);if(a[n]!=a[1])printf("%d %lld\n",a[n]-a[1],s1*s2);else printf("%d %lld\n",a[n]-a[1],(long long )(n-1)*n/2);//while(1);return 0;}


0 0