20200519C

C-Movie Critics

  • 题意

有n部电影,这些电影有k类。如果一直看一种电影不会增加情绪值,如果突然换了另一类电影会增加情绪值。问去掉哪一类电影可以使这个人情绪值最小。

  • 思路

先考虑暴力做法,直接两个for循环嵌套暴力求出每一类电影产生的情绪值,取最小值。但这样是 1 0 5 ∗ 1 0 5 10^5*10^5 105105肯定TLE了。
于是我们可以这样考虑,一边遍历一边求每个电影产生情绪值,我们不难发现如果一个电影的前一个电影和后一个电影种类相同,连在一起就不会增加情绪值,也就是去掉当前这个电影情绪值会-2,如果左右电影不同,那自然情绪值只会-1。利用此规律我们可以求出每一类的电影的情绪值,但在此之前我们需要做一个区间合并,把连续的同类电影只记录一次,道理也很简单因为1 1 1情绪值不会增加,但按照上面的规律左右相同会导致 a [ 1 ] + 2 a[1]+2 a[1]+2

  • 代码
#include<iostream>
#include<cstdio>
 
using namespace std;
 
const int N = 1e5 + 10;
 
int a[N],cnt[N];
int n,k;
 
int main() {
    int maxn = 0;
    int ans = 0;
    int l = 1;
    int temp;
    cin >> n >> k;
    for(int i = 1;i <= n;i++) {
        scanf("%d", &temp);
        if(temp != a[l - 1]) {
            a[l++] = temp;
        }
    }
    for(int i = 1;i <= l - 1;i++) {
        if(a[i - 1] == a[i + 1]) {
            cnt[a[i]] += 2;
        }
        else {
            cnt[a[i]]++;
        }
    }
    maxn = cnt[1];
    ans = 1;
    for(int i = 2;i <= k;i++) {
        if(cnt[i] > maxn) {
            maxn = cnt[i];
            ans = i;
        }
    }
    cout << ans << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值