CodeForces 731B-Coupons and Discounts

落日映苍穹つ 2022-05-17 10:06 227阅读 0赞
  • CodeForces 731B-Coupons and Discounts


  • 题目链接: Coupons and Discounts

  • 思路:

大意是披萨店有两种折扣方式,一是一天买两个披萨二是一天一个披萨连续买两天,给定训练天数和每天训练队伍数(一个队伍一天吃一个披萨),在不多买的情况下问给定数据能否满足所有购买的披萨都能折扣

要么是两天内那两块披萨折扣,要么就一次买两块进行折扣

所以从第一天开始进行遍历

a.如果有落单的披萨,那么下一天必须抽出一块一起折扣,如果下一天不买披萨,不满足要求

b.该天披萨成对买,当天的披萨全都是获得折扣的

注意:需要把已经折扣完的披萨减掉

符合要求的结果:数组全部为0(因为减去的是获得折扣的披萨,为0表示全部披萨获得折扣)

  • 我跳进去的坑:

因为是遍历到最后一天,所以会出现一个问题,如果最后一天披萨数是单数,是不满足题目所要求的所有披萨都要折扣的,但是按我的思路就往后一天再抽一块披萨,但下一天没有初始化,导致bug

解决方法:把第n+1天训练队伍数设为0,防止最后一天单数个披萨错误判定

  • 代码:

    include

    include

    using namespace std;

    define MAX_SIZE 200005

    int Pizza_num[MAX_SIZE];

    int main()
    {

    1. int n;
    2. while (cin >> n)
    3. {
    4. int Break_flag = 0;
    5. for (int i = 0; i < n; i++)
    6. scanf("%d", &Pizza_num[i]);
    7. Pizza_num[n] = 0; //易错
    8. for (int i = 0; i < n; i++)
    9. {
    10. if (Pizza_num[i] == 0)
    11. continue;
    12. else
    13. {
    14. if (Pizza_num[i] % 2)
    15. {
    16. if (Pizza_num[i + 1] == 0)
    17. {
    18. Break_flag = 1;
    19. break;
    20. }
    21. Pizza_num[i + 1] -= 1;
    22. }
    23. Pizza_num[i] = 0;
    24. }
    25. }
    26. for (int i = 0; i < n; i++)
    27. {
    28. if (Pizza_num[i])
    29. {
    30. Break_flag = 1;
    31. break;
    32. }
    33. }
    34. if (Break_flag)
    35. cout << "NO" << endl;
    36. else
    37. cout << "YES" << endl;
    38. }
    39. return 0;

    }

发表评论

表情:
评论列表 (有 0 条评论,227人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CodeForces 731C Socks 并查集

    1 //题意:有n只袜子,m天,k个颜色,每个袜子有一个颜色,再给出m天,每天有两只袜子,每只袜子可能不同颜色, 2 //问要让每天的袜子是相同颜色的,要重新