CeShi-9 御膳房 (10 分)

探讨了一种通过调整早餐菜单顺序,确保皇帝每天早餐不重复的算法。利用桶方法统计菜品频率,交替排列最频繁菜品与其他菜品,避免连续重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CeShi-9 御膳房 (10 分)

御膳房要准备皇帝的早餐,非常的辛苦。辛苦是因为这个皇帝很挑剔,要求相邻两天不能吃相同的早餐。根据采买到的原料,御膳房准备了未来几天的早餐的菜单。但是厨师不懂数学,排出的菜单有相邻两天重复的。你能否根据菜单,判断能不能调整成相邻两天不重复的呢?



输入格式:
首先是一个正整数N(1<N<100),表示厨师准备了N天的菜单。 然后是N个正整数Pi(1<Pi<100),每个数字表示一天的早餐内容。相同的数字表示相同的内容。

输出格式:
如果可以调整成相邻两天不重复,就输出

YES

否则就输出

NO

输入样例:
6
1 2 4 6 6 4
输出样例:
YES

为了解释题目题意关系,给出如下样例:
8
1 3 3 4 4 4 4 4
NO
7
1 3 3 4 4 4 4
YES

(2021年3月更新:源代码出现问题原因可能是PTA重新更新了测试点,并调教了题目思路,原有找规律方法已经不再适用,现在转载一个大佬的思路。)
旧错:)/*题目思路:经过长时间在纸上写数列发现如下规律,当队列为偶数时,最多重复数的重复次数小于等于n/2+1即可进行调整,大于n/2+1时均无法调整,当对列为奇数时,最多重复数的重复次数小于等于n/2+1即可进行调整,大于n/2+1时均无法调整。

这时题目关键就变为找出各个数出现的次数。

旧错:)代码如下:

import java.util.*;
public class Main{
    
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] a=new int[n];
        int i,m;
        for(i=0;i<n;i++)
        {
           m=sc.nextInt();
           a[m]++;
        }
        for(i=0;i<n;i++)
        {
            if(a[i]>=(n/2+2))
            {
                System.out.println("NO");
                return;
            }
        }
        System.out.println("YES");
    }
}
*/


(新:转载;正确)思路:首先,使用桶的方法存放每种菜品出现的次数,寄存出现最多的菜品序号。接下来,选择出现频度最多菜品之外(频度最多的菜品序号不为0)的菜品来与频度最多菜品进行交替排列,防止出现重复菜品(即a[max]–)。(注意:这时如果出现筛选出的菜品序号为0的情况,则说明除频度最多菜品之外其他菜品已经用完,无法实现不重复排布,这时直接输出NO)最终,查看最多频度序号,如果此时最多频度序号max=0则说明菜品已经用完,可以满足不重复排布,输出YES;否则,不满足输出NO。
(新:代码)
转载自柴郡帽:7-77 御膳房 (5分)如侵删
https://blog.youkuaiyun.com/m0_46311755/article/details/105716948

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值