1 条题解
-
0
Written by @Yue_chen
题意:
给定 n 组人,要么是 1个, 要么是两个。
给定一排长度为 L 的座位 (所有人数之和必然等于L)
n组人依次来占座位,在最坏情况下是否能保证每一组人都能连坐在一起。
思路:
思考发现,只有当后面的人是2个的时候可能会做不到一起。
直接把前面的每组都想象的比较邪恶,每组都隔一个位置再坐,这样可以让后面2个人一起的队伍没法插空。
相当于把前面每一组占用的座位都+1
当最后没法隔着坐,并且挤不下时,判断还有没有2人一组的队伍还没坐,如果有就是“No”
否则是"Yes"
需要注意一下,如果最后剩了两个座位,并且刚好是两人一组过来,他们是可以做得下的,只不过他们占用的座位就没办法+1了。
时间复杂度O(n)
AC代码:
#include<bits/stdc++.h> using namespace std; using i64 = long long; void solve() { int n, L; cin>>n>>L; for(int i=1; i<=n; ++i) { int x; cin>>x; if(L >= x+1) L -= x+1;//隔着坐能否坐下 else if(L >= x) L -= x;//最后挤一挤能否坐下 else {//只能挤着坐了,且空隙全为1,出现2人一起的就寄 if(x == 2) { cout<<"No\n"; return ; } } } cout<<"Yes\n"; } signed main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); int t=1; //cin>>t; while (t--) solve(); return 0; }
信息
- ID
- 124
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 183
- 已通过
- 23
- 上传者