B. Pashmak and Flowers

题目链接:http://codeforces.com/problemset/problem/459/B

 

这道题是个水题,但是如果你想要暴力去做的话是不能过的。

思路:

首先我们对数组进行排序,找到最大值和最小值。然后统计最大值和最小值出现的次数,然后相乘就可以了。

但是!

如果最大值和最小值相等呢?也就是说这个数组的所以元素都是一样的,那么是不符合上述公式的。

所以我们需要特判一下。如果都相等的时候,任意取两个都符合条件,n*(n-1)/2

 

因为出现了相乘,所以我们还得考虑类型的转化。 int-> long long 

 

所以这道题的坑点还是挺多的。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <stdlib.h>
 4 #include <string>
 5 #include <string.h>
 6 #include <set>
 7 #include <queue>
 8 #include <stdbool.h>
 9 #include <map>
10 
11 using namespace std;
12 const int MAXN=200005;
13 
14 int n;
15 int a[MAXN];
16 int vis[MAXN];
17 
18 int main()
19 {
20 #ifndef ONLINE_JUDGE
21     freopen("../in.txt","r",stdin);
22 #endif
23     scanf("%d",&n);
24     for (int i=0;i<n;i++){
25         cin >> a[i];
26     }
27     sort(a,a+n);
28     long long int  cnt = 0;
29     int max_count = a[n-1] - a[0];
30     int mx = a[n-1];
31     int mm = a[0];
32     int m1 = 0;
33     int m2 = 0;
34     for (int i=0;i<n;i++)
35     {
36         if (a[i] == mx)
37             m1++;
38         if (a[i] == mm)
39             m2++;
40     }
41     cnt = (long long)m1*m2;
42     if (mx == mm)
43         cnt = (long long)(n-1)*n/2;
44     cout << max_count << " " << cnt << endl;
45     return 0;
46 }

 

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务