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 }

 

全部评论

相关推荐

昨天 18:37
门头沟学院 Java
勇敢的ssr求对象:前面看的有点奔溃,看到只有你是真玩啊,忍不住笑出了声😂
点赞 评论 收藏
分享
04-22 15:13
已编辑
Java
点赞 评论 收藏
分享
好久没来牛客了,今天面试了一个实习生,感觉对方形象乱糟糟的,头发像鸡窝,像刚睡醒就来面试了,第一印象直接大打折扣,感觉我没有受到应有的尊重,再加上对方业务能力也一般,我直接挂掉;大家面试的时候还是好好收拾一下自己吧,争取给面试官留下个好印象,面试这东西还是存在眼缘的
MinJerous:更在乎本质,应该看候选人是否和岗位需要的能力匹配。洗脸/不洗头都无所谓吧,说不定人家刚刚通宵准备,就是为了这场面试呢?你挂掉他核心原因还是他能力不行,而不是形象。就算形象好点,能力不行你敢给过吗,不怕后面+1质疑你
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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