1 条题解

  • 0
    @ 2026-9-1 8:23:38

    其实还好。

    ATC 原题链接

    题意

    LL 个凳子 nn 个团队,每个团队 aia_i 人,满足 1ai21 \leq a_i \leq 2

    团队按顺序落座,问能否在任何情况下每个团队的人都能坐在一起?

    思路

    构造出最糟糕的情况。

    显然,ai=1a_i=1 的团队是无论如何都不会被卡的,那么就考虑怎么卡 ai=2a_i=2 的团队。

    那么就可以让每个团队坐的位置之间隔 11 格,这样就可以卡 ai=2a_i=2 的团队了。

    如果即使这样卡,也能使所有 ai=2a_i=2 的团队坐下来,那么就输出 yes,反之 no

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    const int MAXN = 2e5 + 5;
    int a[MAXN];
    int n,m,now;
    
    int main() {
    	cin >> n >> m;
    	for (int i = 1; i <= n; i++) cin >> a[i]; //没啥好说的输入
    	for (int i = 1; i <= n; i++) {
    		if (now + a[i] <= m) { //前面有坐人的(或是故意空开的)座位数
    			now += a[i];
    			now++; //空开一格
    		} 
    		else if (a[i] != 1){ //两个人的组坐不下了
    			cout << "No" << endl;
    			return 0;
    		}
    	}
    	cout << "Yes";
    	return 0;
    } 
    

    在ATC上的通过记录

    • 1

    信息

    ID
    244
    时间
    2000ms
    内存
    1024MiB
    难度
    9
    标签
    递交数
    12
    已通过
    5
    上传者