关于一道题目是否可做
  • 板块灌水区
  • 楼主ChenZQ
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/5/3 22:24
  • 上次更新2024/5/4 09:14:57
查看原帖
关于一道题目是否可做
745358
ChenZQ楼主2024/5/3 22:24

这道题首先第一眼看过去,我感觉好像很玄学。题目没有要求最后一站的人数,也没有说公交车初始有多少个人,而且他让我们求第一站的上下车人数的方案数。

按照常理,第一站是起始站,只有人上车,可是题目同时还让我们求了下车人数的方案数。那么只有可能:上车的人刚上车就下车了。

如果真是这样,那么还说得过去,毕竟编程题有时候背景确实会不合理,但是相信大家注意到了一句话。

那这就奇怪了,这就是自相矛盾啊。

哪怕真得有人能刚上车就下,那么公交车终点站要全部下光人,那么我们以0反推,我们会发现方案数是无限得。

样例:

输入 1复制

4

2 2

5 2

2 2

输出 1复制

7

输入 2复制

4

2 2

2 5

2 2

输出 2复制

7

甚至样例1第一站下车的人比上车的人还多,那就更离谱了,公交车上的人还能使负数??

所以我认为,这道题不可做,而老师坚定地认为没有问题,以下是他给我们得题解:

C - 萨特兰蒂斯城的一天(二)
a1>=0,b1>=0
a1+...+an=b1+...+bn,只要确定了b1那么a1也一定是可以确定的
对于所有的i,ai+bi<=a1+...+an
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    int a_sum = 0, b_sum = 0;
    vector<int> a(n - 1), b(n - 1);
    for (int i = 0; i < n - 1; i++) {
        cin >> a[i] >> b[i];
        a_sum += a[i];
        b_sum += b[i];
    }
    int m = 0;
    for (int i = 0; i < n - 1; i++) {
        m = max(m, a[i] + b[i] - a_sum);
    }
    cout << b_sum + 1 - max(m, b_sum - a_sum) << endl;
    return 0;
}

而我对我的看法对他得质疑提出了种种疑问,以下是他的回答:

但是我觉得老师回答得不清不楚的,我感觉根本没有可能做这道题,求大家评评理。

当然,我也有可能是错的,不过我只是想把这道题搞懂,希望大佬指点

2024/5/3 22:24
加载中...