Codeforces Round #312 (Div. 2) B. Amr and The Large Array
2015-10-25 12:59
465 查看
题目地址
题目大意:给一个有n个元素的数组,求数组中出现次数最多的元素的位置区间,若有多个元素出现次数相同且最多,则输出区间长度最短的左边位置和右边位置
解题思路:记录每个数出现的次数及其左右位置,先按次数排序,再按区间长度排序,问题在于有些数存在,有些数不存在,但是我们只需要输出出现次数最多并且区间最短数的最先出现位置和最后出现位置,用一个map来解决有些数不存在的情况,将数组元素映射成连续的数,排序即可
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
const int maxm = 1e6+100;
int a[maxn];
struct P
{
int cnt,r,l;
}p[maxm];
bool cmp(P a, P b)
{
if(a.cnt == b.cnt) return a.r-a.l < b.r-b.l;
return a.cnt>b.cnt;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
map<int,int> mp;
for(int i = 0; i < maxm; i++)
p[i].cnt = p[i].r = p[i].l = 0;
int ct = 1;
for(int i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
if(!mp[a[i]])
mp[a[i]] = ct++;
p[mp[a[i]]].cnt++;
if(p[mp[a[i]]].l == 0)
p[mp[a[i]]].l = i;
if(p[mp[a[i]]].l)
p[mp[a[i]]].r = i;
}
sort(p+1,p+ct,cmp);
printf("%d %d\n",p[1].l,p[1].r);
}
return 0;
}
题目大意:给一个有n个元素的数组,求数组中出现次数最多的元素的位置区间,若有多个元素出现次数相同且最多,则输出区间长度最短的左边位置和右边位置
解题思路:记录每个数出现的次数及其左右位置,先按次数排序,再按区间长度排序,问题在于有些数存在,有些数不存在,但是我们只需要输出出现次数最多并且区间最短数的最先出现位置和最后出现位置,用一个map来解决有些数不存在的情况,将数组元素映射成连续的数,排序即可
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
const int maxm = 1e6+100;
int a[maxn];
struct P
{
int cnt,r,l;
}p[maxm];
bool cmp(P a, P b)
{
if(a.cnt == b.cnt) return a.r-a.l < b.r-b.l;
return a.cnt>b.cnt;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
map<int,int> mp;
for(int i = 0; i < maxm; i++)
p[i].cnt = p[i].r = p[i].l = 0;
int ct = 1;
for(int i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
if(!mp[a[i]])
mp[a[i]] = ct++;
p[mp[a[i]]].cnt++;
if(p[mp[a[i]]].l == 0)
p[mp[a[i]]].l = i;
if(p[mp[a[i]]].l)
p[mp[a[i]]].r = i;
}
sort(p+1,p+ct,cmp);
printf("%d %d\n",p[1].l,p[1].r);
}
return 0;
}
相关文章推荐
- JSdome节点常用部分和事件内容
- Sublime Text
- python实现发送邮件
- python socket 选项
- A/B(扩展欧几里德)
- BZOJ 3670 [Noi2014]动物园 (KMP next数组应用)
- (四)、一步一步学GTK+之多窗口
- PHP文件加密解密
- S3C6410板子移植 Android2.2
- LightOJ 1258 - Making Huge Palindromes【kmp】
- JAVA学习路线图
- (三)、一步一步学GTK+之布局
- (二)、一步一步学GTK+之窗口
- [思考] hdu 4811 Ball
- layoutSubviews在以下情况下会被调用:
- Opencv videowriter保存的视频只有几K
- java数组的行数和列数
- (一)、一步一步学GTK+之开篇
- linux vim 编辑器命令记忆技巧
- 2:url有规律的多页面爬取