1 条题解

  • 1
    @ 2023-5-22 11:31:41

    一年前的代码

    我们可以发现,要使坐的人尽可能的多,显而易见的是第一个坐的人坐在最左边,第二个人坐在他右边两列……,这是一种贪心的思路,假如我们不这么坐,就会浪费最左边的位置,这种解法一定不是最优的

    既然这么坐了,又由题目的规则,我们可以把两行简化成一行(每列只能最多坐一个人,因此没必要考虑两行),最左边坐了人,我们用1表示坐人,0表示没坐人

    n = 5
    1  0  1  0  1
    ------------------
    n = 6
    1  0  1  0  1  0
    ------------------
    n = 7
    1  0  1  0  1  0  1
    

    这个1的个数小学生都能找到:n为偶数的时候是n//2n//2,n为奇数的时候是(n+1)//2(n+1)//2,我们也可以写成一个统一的形式:

    n//2+n%2n//2+n \% 2

    代码不难得出


    C++

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        int n;
        cin >> n;
        cout << n/2+n%2;
        return 0;
    }
    

    Python

    n = int(input())
    print(n//2+n%2)
    
    • 1

    信息

    ID
    759
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    107
    已通过
    80
    上传者