美团校招-改考卷-c++

改考卷

时间限制:C/C++语言 2000MS;其他语言 4000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

在上小学的时候,我们经常碰到这样的事:考完试后老师懒得改试卷,于是让我们同桌相互交换试卷后为对方批改。但是后来老师发现这样作容易出现作弊,于是他想了一个新办法。老师将同学分成了 n 个组,其中编号为𝑖的组中有𝑠𝑖 个人。然后老师会按某种顺序依次访问这些组。
对于他访问的第一个组,他会将这组内的所有试卷都收走,放置在桌上;对于他后续访问的每一个组,首先他会从桌上的试卷最上方拿出该组对应人数数量的试卷,随机分配给该组每个人一张试卷让他们进行批改,而后再将这组学生自己考的试卷收走放置在桌面试卷的最下方。当他访问完所有的组后他会将桌面上剩余的所有试卷随机分配给他第一个访问的组的学生进行批改。
但他发现这种方法有时候也会出现问题:有可能在中途访问到某个组的时候桌面上的试卷不够分配给这组学生每人一张;也有可能最后会有学生分配到批改自己的试卷,而且这两种情况是否出现是与他访问每个组的顺序有关的。现在他想知道是否存在一种访问顺序能够使以上两种情况都不出现,顺利完成试卷批改呢?
输入
第一一个整数𝑛,表示学生组数。2 ≤ 𝑛 ≤ 30
第二行包含𝑛个整数,𝑠1 ,𝑠2 ,…,𝑠𝑛 ,分别表示每组学生的人数。1 ≤ 𝑠𝑖 ≤ 10000
输出
若存在一种访问顺序能使试卷顺利批改完成,输出 Yes,否则输出 No。

样例输入

Input Sample 1
2
10 20
Input Sample 2
4
2 3 3 1

样例输出

Output Sample 1
No
Input Sample 2
Yes

Hint

对于第 2 组样例,我们可以选择先访问人数为 3 的组,再访问人数为 3 的组,再访问人数
为 1 的组,最后访问人数为 2 的组。

#include <iostream>
using namespace std;
/*解题思路:
*条件1:每次分配的时候试卷必须够
*条件2:最后分配的时候,不能改到自己组的卷,也就是自己的卷必须已经被前面的组改过了
*得出目标条件:
 //*1. 将试卷数最多的组作为第一组,以满足条件1 
* 2. 第一组的试卷总数必须少于等于其余所有组的试卷数总和,以满足条件2*/
int main()
{
    int n;
    while (cin >> n)
    {
        int sum = 0, max = 0;
        for (int i = 0; i < n; ++i)
        {
            int si;
            cin >> si;
            sum += si;
            if (si > max)
                max = si;
        }
        if (max <= sum - max)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,023评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,775评论 18 399
  • 1.他对她的暗恋,唯美而纯真 不知何时,他喜欢上了她。心中的情素默默地为她守候。 同桌,前后桌,话前话后,多半玩笑...
    c94868399e8c阅读 3,196评论 0 5
  • 《你要去相信,没有到不了的明天》 ——绪言有感 灼灼其华 “感谢你没有选择放弃。” 曾经我想,如果有...
    lavenderwj阅读 3,725评论 2 2
  • 大家好让我们来探讨探讨世界上人是怎么出来的,在咱们的历史中第一个皇帝是秦始皇,中国五千年历史中的第一任皇帝,...
    A神aywj阅读 1,535评论 0 0

友情链接更多精彩内容