1 条题解

  • 0
    @ 2026-5-4 22:37:43

    解题思路

    xx 为能够进入院子的最大老太太人数。如果玛丽亚·伊万诺夫娜一次性叫来这 xx 个人,那么每个人在进入时都会看到 xx 个人(包括她自己?注意题目中的“其他老太太”不包括自己,但包括玛丽亚)。由于 xx 是最大答案,那么这些老太太中的每一个人都必须满足 aixa_i \le x(否则这些老太太根本没有办法聚集到院子里)。因此,一次性叫所有人这样操作是可行的。

    注意,如果按照 aia_i 对老太太排序,那么玛丽亚需要叫的前 xx 个人就是排序后的前 xx 个老太太。当且仅当第 xx 个人的要求 axxa_x \le x 时,她可以叫这 xx 个人(否则,当这 xx 个人都到达后,最后一个人会不满意)。为了找到最大的 xx,我们可以进行线性搜索。

    总时间复杂度为每个测试用例 O(nlogn)O(n \log n)(排序开销),也可以优化到 O(n)O(n) 使用计数排序,但 nn 的总和不超过 10510^5,因此两种方法均可。

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    void solve() {
        int n;
        cin >> n;
        vector<int> arr(n);
        for (int &el : arr)
            cin >> el;
        sort(arr.begin(), arr.end());
        for (int i = n - 1; i >= 0; i--) {
            if (arr[i] <= i + 1) {
                cout << i + 2 << '\n';
                return;
            }
        }
        cout << 1 << '\n';
    }
    
    int main() {
        int t;
        cin >> t;
        while (t--)
            solve();
    }
    
    • 1

    信息

    ID
    6876
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者