2020ICPC·小米 網路選拔賽第二場 Subsequence Pair(貪心二分)
題意:
一個只含有0,1,2的序列,要求選出最多的2,0,2,0子序列,且子序列之間沒有交集。
思路:
二分選了mid個2020,然後從前往後找mid個20序列,再從後往前找出剩餘所有的20序列。
前面部分的20序列優先按照0的座標(右端點)排序,後面部分的20序列優先按照2的座標(左端點排序),然後兩者匹配看能否滿足要求。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int maxn = 2e5 + 7;
int a[maxn],vis[maxn];
int n;
int cmp1(pair<int,int>p1,pair<int,int>p2) {
if(p1.first != p2.first) return p1.first < p2.first;
return p1.second < p2.second;
}
int cmp2(pair<int,int>p1,pair<int,int>p2) {
if(p1.second != p2.second) return p1.second < p2.second;
return p1.first < p2.first;
}
bool check(int mid) { //
for(int i = 1;i <= n;i++) vis[i] = 0;
vector<pair<int,int>>Q1;
vector<pair<int,int>>Q2;
queue<int>q0,q2;
for(int i = 1;i <= n;i++) {
if(a[i] == 0) {
if(!q2.empty()) {
int now = q2.front();q2.pop();
vis[now] = 1;vis[i] = 1;
Q1.push_back({now,i});
}
} else if(a[i] == 2) {
q2.push(i);
}
if(Q1.size() >= mid) break;
}
for(int i = n;i >= 1;i--) {
if(vis[i]) continue;
if(a[i] == 2) {
if(!q0.empty()) {
int now = q0.front();q0.pop();
vis[now] = 1;vis[i] = 1;
Q2.push_back({i,now});
}
} else if(a[i] == 0) {
q0.push(i);
}
}
sort(Q1.begin(),Q1.end(),cmp2);
sort(Q2.begin(),Q2.end(),cmp1);
if(Q1.size() < mid) return false;
int t = 0;
for(int i = 0;i < Q1.size();i++) {
int flag = 0;
while(t < Q2.size()) {
if(Q2[t].first > Q1[i].second) {
flag = 1;
t++;
break;
}
t++;
}
if(!flag) return false;
}
return true;
}
int main() {
while(~scanf("%d",&n)) {
for(int i = 1;i <= n;i++) {
scanf("%1d",&a[i]);
}
int l = 0,r = n / 2;
int ans = 0;
while(l <= r) {
int mid = (l + r) >> 1;
if(check(mid)) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
printf("%d\n",ans);
}
return 0;
}
相關文章
- 2020ICPC·小米 網路選拔賽第一場
- 2020ICPC小米邀請賽2 A-2020(貪心+二分)
- 2020ICPC·小米 網路選拔賽熱身賽K-Random Point in Trianglerandom
- 二分/貪心(ICPC小米預賽第一場 A 2020)
- acm-(推式子、好題、數學、排列計數)2020ICPC·小米 網路選拔賽第一場 H.GroupingACM
- 2020ICPC小米網路賽 C.Data Structure ProblemStruct
- 2024中國工業網際網路安全大賽智慧家電行業賽道選拔賽行業
- leetcode1552題解【二分+貪心】LeetCode
- 貪心-*活動選擇
- 2024天梯選拔賽(一)
- 河北大學選拔賽補題
- 中新賽克榮獲2022年中國工業網際網路安全大賽(福建省選拔賽)暨福建省第二屆工業網際網路創新大賽優秀組織獎
- 【貪心】【二分】[NOIP2015]跳石頭
- 2024 ICPC 網路預選賽 第 2 場
- E Revenge on My Boss CCPC 2023 Harbin Site 貪心,二分
- 貪心
- C240817C. 團隊協作:二分答案+貪心
- 天梯選拔賽2補題_2024_03_09
- 賽寧網安網路靶場全支撐-第二屆“強網”擬態國際精英挑戰賽
- 反悔貪心
- Supermarket(貪心)
- 賽寧網安網路靶場助力-第二屆“強網”擬態國際精英挑戰賽圓滿落幕
- C++奧賽一本通貪心題解C++
- 2021年中國工業網際網路安全大賽遼寧省選拔賽 暨“綠盟杯”遼寧省資訊通訊行業網路安全技能大賽完美收官行業
- ZOJ——Copying Books 最大值最小化問題 (貪心 + 二分)
- 貪心例題
- 貪心+搜尋
- 牛客練習賽40 B 小A與任務(貪心)
- 【kubernetes】網路虛擬網路卡對veth pair、flannel網路模型實現原理AI模型
- POJ-3061 Subsequence(字首和+二分/尺取)
- bzoj2426: [HAOI2010]工廠選址(貪心)
- 活動選擇問題理解貪心演算法演算法
- 牛客練習賽26 C 城市規劃【思維+貪心】
- bzoj3613: [Heoi2014]南園滿地堆輕絮(二分+貪心)
- HDU 5821 Ball(貪心)
- 貪心模式記錄模式
- 反悔貪心雜題
- 貪心演算法演算法