沉鱼落雁(思维题)

题目描述

胖头鱼在苦恼“沉鱼落雁”是什么好吃的东西,这很显然是因为他成语没背够。

于是他决定开始背成语。胖头鱼身为鱼界大佬,背成语的姿势自然也和常人不一:

他会先将所有要背的成语一字排开,比较难背的成语会重复出现,最多重复 3 次 (也就是出现次数可能为 1, 2 或 3)。这样就得到了一个可能有重复元素的成语序列,然后他会将这个序列打乱顺序,并按打乱后的顺序背下去。为了均匀的背所有成语,提高背成语的效率,相同成语在打乱后的序列中出现位置的最小间隔自然是越大越好。 (编号为 a 和 b (a<b) 的两个位置的间隔定义为 b−a−1)

现在胖头鱼把打乱前的成语序列给你,你需要帮他打乱顺序,使得相同成语的最小间隔最大。

你不需要输出确切的方案,仅求出最小间隔的最大值即可。

特别地,当每种成语都只出现一次时,把最小间隔的最大值视为n。

输入描述

第一行一个整数 n ( 1≤n≤10^5),表示成语序列长度为 n。同一个成语最在序列中最多出现 3 次。

接下来 n 个整数 a1, a2, …, an (1≤ai≤10^9) 表示一个成语序列,每个正整数都代表一个成语,两个成语不同当且仅当值不同。

输出描述

输出一个整数,表示最小间隔的最大值。

样例输入 1

9
5 4 3 1 3 1 1 5 5

样例输出 1

2

样例解释1

其中一組可行方案是1 3 5 1 3 5 1 4 5,容易验证没有比 22 更大的答案。

样例输入2

5
1 2 3 4 5

样例输出2

5
链接:

https://www.cometoj.com/contest/65/problem/B?problem_id=3683

解析:

思维题。

我们可以统计出现三次两次一次元素的个数,分别记为a,b,c;

假设11122233344556,我们可以发现有3个出现三次元素,2个出现两次的元素,1个出现一次的元素。我们可以这样 123 45 6 123 45 6 123这样分。

那么这时间隔为a-1+b+c/2,下取整。

如果没有出现三次的元素,例如112234

我们可以 12 3 4 12这样分

即 a+b-1

代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+20;
int a[maxn];
map<int, int> mp;
int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    mp.clear();
    int count1,count2,count3;
    count1 = count2 = count3 = 0;
    for(int i = 0; i < n; i++) {
        cin >> a[i];
        mp[a[i]]++;
    }
    int mx = 0;
    for(auto u:mp) {
        if(u.second == 1)
            count3++;
        else if(u.second == 2)
            count2++;
        else if(u.second == 3)
            count1++;
        mx = max(mx, u.second);
    }
    if(mx == 1) {
        cout << n << endl;
    }
    else if(mx == 2){
        cout << count2 + count3 - 1 << endl;
    }
    else 
     cout << count1 + count2 - 1 + (count3/2) << endl;

    return 0;
}

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值