F-Candies
来源: 牛客多校训练营7 算法: 双端队列, 模拟 题目链接: https://ac.nowcoder.com/acm/contest/33192/F 补完: Yes 完成时间: August 25, 2022
题解
给长度为\(n\)的数列\(a[i]\)和\(x\), 若有\(a[i]==a[(i+1)\%n]\)或\(a[i]+a[(i+1)\%]==x\), 则可以将此两数删去, 问最大可删除次数.
直接使用双端队列模拟, 循环遍历每两个数直到比无可比.
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include<bits/stdc++.h>
using namespace std;
const int MAXN = 100005; int n, x; int ans = 0;
void solve() { cin>>n>>x; int a; deque<int> A; for (int i = 1; i <= n; i++) { cin>>a; A.push_back(a); } for (int i = 0; i <= MAXN; i++) { if (A.size()<=1)break; if (A.front()==A.back() || A.front()+A.back()==x) { ans++; A.pop_back(); A.pop_front(); } else { A.push_back(A.front()); A.pop_front(); } } cout<<ans; }
int main() { int T = 1; while (T--) { solve(); } return 0; }
|