P9900『PG2』消除萝卜 B 题解
大家好,我是 rc_Wechis。
题目传送门
solution
思考
眨眼一看此题如此困难,但是只要冷静下来仔细分析,还是可以找到一些线索的。
(1)若一个萝贝下面没有萝贝,它会一掉到底。
(2)可以上移萝贝,但是这个方法代价太大,我们尽量不用。
(3)可以添加萝贝,但是必须得上移。
我们发现如果出现以下情况:
| 0 | 1 |
|---|---|
| 0 | 1 |
| 1 | 0 |
那么无论我们拿掉底层的哪个萝贝,我们都不能在第一时间使用联通块消除大量萝贝。但是,只要我们在它的右下角放一个
而且由于题目十分良心,每一行只有两列,而且元素互不相同,也就是说只要你在最底下放一个萝贝就一定会有元素个数
记初始数据的联通块个数为 res,加上放的一个萝贝,加上
code
#include<bits/stdc++.h>
using namespace std;
const int N=5e6+5;
int res,n,a[N];
int main(){
cin>>n;
memset(a,-1,sizeof a);
for(int i=1;i<=n;i++)cin>>a[i]>>a[i];
for(int i=1;i<=n;i++){
if(a[i]!=a[i-1])res++;
}
cout<<((res+1)>>1)+1<<endl;
return 0;
}
好了,这次就先到这里。