bitset+暴力——校门外的树(增强版)
来源:互联网 发布:python 周期性任务 编辑:程序博客网 时间:2024/05/21 22:29
题目来源
洛谷1276校门外的树(增强版)
https://www.luogu.org/problem/show?pid=1276
思路
bitset大法好!
洛谷的数据水我会说吗?!
纯模拟就好了:)
g[i]记录经过包括挖和种的操作后i位置的状态(是否有树)
k[i]记录经过挖操作后i位置的状态
g.count()为剩下的包括树苗和原树的树的个数
k.count()为剩下的原树的个数
g.count()-k.count()即为剩下的树苗的个数
如果i位置没有树且正要种树苗 标记i点k[i]为1
砍树时 如果当前点i的g[i]为1(有树)且k[i]为1(为树苗)
则该点为种上又被砍掉的树苗 记录该点(num[++top]=i)
由于num数组中可能有相同位置的树苗被砍多次 而我们只求位置数
所以我们要去重!unique大法好!
代码(C++)
#include <cstdio>#include <bitset>#include <algorithm>using namespace std;int l,m,x,y,w,cnt=0,num[1000010];bitset<10010> g,k,c;int main(){ scanf("%d%d",&l,&m); for(int i=0;i<=l;++i) g[i]=1,k[i]=1; for(int i=1;i<=m;++i) { scanf("%d%d%d",&w,&x,&y); if(w==1) { for(int j=x;j<=y;++j) { if(g[j]==0) c[j]=1; g[j]=1; } } else {for(int j=x;j<=y;++j) { if(g[j]==1&&c[j]==1) num[++cnt]=j; g[j]=0;k[j]=0; } } } printf("%d\n",g.count()-k.count()); printf("%d",unique(num+1,num+cnt)-&num[0]); return 0;}
阅读全文
0 0
- bitset+暴力——校门外的树(增强版)
- bitset+暴力——校门外的树
- 模拟——校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树
- 校门外的树!
- 校门外的树
- 校门外的树
- 校门外的树
- emoji表情存入数据库
- [FJOI2007]轮状病毒
- 9.08 笔记-抽象类与接口与多态
- Java设计模式_(行为型)_观察者模式
- 【codevs 2451】互不侵犯
- bitset+暴力——校门外的树(增强版)
- shell
- python里面random的使用
- 3.4 线程id获取
- LeetCode 96. Unique Binary Search Trees Python Solution, Catalan数 结点数为n的不同形态的二叉树一共有多少种
- 沪江日语百度云视频 0-n1百度云网盘视频的swf需要特定的播放器才能播放
- [POJ 3321]Apple Tree dfs序+树状数组
- 中文分词之jieba简单应用
- html 中的 header-作用与使用