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