「日常训练」Woodcutters(Codeforces Round 303 Div.2 C)
这题惨遭被卡。。卡了一个小时,太真实了。
题意与分析 (Codeforces 545C)
题意:给定\(n\)棵树,在\(x\)位置,高为\(h\),然后可以左倒右倒,然后倒下去会占据\([x-h,x]\)或者\([x,x+h]\)区间,如果不砍伐,占据\([x,x]\)区域。
问你最多砍多少棵树,砍树的条件是倒下去后占有的区间不能被其他树占据。
分析:在这条题目的条件下,这是一个傻逼贪心题。(然后我读错两次题目,怎么也想不出来贪心策略。。。。)
很简单的策略:能往左倒往左倒,能往右倒往右倒。因为树的倒下无论如何只会影响额外的一棵树!!(换句话说,如果说倒下的区间不用考虑树的存在,就很有意思了)举个例子,考虑一种极端情况:第\(i\)棵树到第\(n\)棵树如果挨个往左倒正好完美覆盖。那么这种情况下你第\(i-1\)棵树如果可以往右倒照样可以往右倒,因为每棵树的倒下只影响另外左右一个树,那么我大不了第\(i\)棵树不倒,我的答案不会更差。这样就确定了贪心策略的正确性。
代码
#include <bits/stdc++.h>
#define MP make_pair
#define PB push_back
#define fi first
#define se second
#define ZERO(x) memset((x), 0, sizeof(x))
#define ALL(x) (x).begin(),(x).end()
#define rep(i, a, b) for (repType i = (a); i <= (b); ++i)
#define per(i, a, b) for (repType i = (a); i >= (b); --i)
#define QUICKIO \
ios::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
using namespace std;
using ll=long long;
using repType=int;
int main()
{
int n; cin>>n;
pair<int,int> tree[100005];
rep(i,1,n) cin>>tree[i].fi>>tree[i].se;
int cnt=0;
int npos=0,ntree=1;
int cut[100005]; ZERO(cut);
rep(i,1,n)
{
int l_boundary=tree[i].fi-tree[i].se,
r_boundary=tree[i].fi+tree[i].se;
bool lok=true;
per(j,i-1,1)
{
if(tree[j].fi>=l_boundary || (cut[j]==2&&tree[j].fi+tree[j].se>=l_boundary))
{
lok=false; break;
}
if(tree[j].fi+tree[j].se<l_boundary) break;
}
if(lok) { cut[i]=1; continue; }
bool rok=true;
rep(j,i+1,n)
{
if(tree[j].fi>r_boundary) break;
else if(tree[j].fi<=r_boundary) {rok=false; break;}
}
if(rok) cut[i]=2;
}
int ans=0;
rep(i,1,n) if(cut[i]) ans++;
cout<<ans<<endl;
return 0;
}
「日常训练」Woodcutters(Codeforces Round 303 Div.2 C)的更多相关文章
- DP Codeforces Round #303 (Div. 2) C. Woodcutters
题目传送门 /* 题意:每棵树给出坐标和高度,可以往左右倒,也可以不倒 问最多能砍到多少棵树 DP:dp[i][0/1/2] 表示到了第i棵树时,它倒左或右或不动能倒多少棵树 分情况讨论,若符合就取最 ...
- 水题 Codeforces Round #303 (Div. 2) D. Queue
题目传送门 /* 比C还水... */ #include <cstdio> #include <algorithm> #include <cstring> #inc ...
- 贪心 Codeforces Round #303 (Div. 2) B. Equidistant String
题目传送门 /* 题意:找到一个字符串p,使得它和s,t的不同的总个数相同 贪心:假设p与s相同,奇偶变换赋值,当是偶数,则有答案 */ #include <cstdio> #includ ...
- 水题 Codeforces Round #303 (Div. 2) A. Toy Cars
题目传送门 /* 题意:5种情况对应对应第i或j辆车翻了没 水题:其实就看对角线的上半边就可以了,vis判断,可惜WA了一次 3: if both cars turned over during th ...
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- 「日常训练」Queue(Codeforces Round 303 Div.2 D)
简单到让人不敢相信是D题,但是还是疏忽了一点. 题意与分析 (Codeforces 545D) 题意:n人排队,当一个人排队的时间超过他需要服务的时间就会厌烦,现在要求一个最优排列使得厌烦的人最少. ...
- 「日常训练」Watering Flowers(Codeforces Round #340 Div.2 C)
题意与分析 (CodeForces 617C) 题意是这样的:一个花圃中有若干花和两个喷泉,你可以调节水的压力使得两个喷泉各自分别以\(r_1\)和\(r_2\)为最远距离向外喷水.你需要调整\(r_ ...
- 「日常训练」Alternative Thinking(Codeforces Round #334 Div.2 C)
题意与分析 (CodeForces - 603A) 这题真的做的我头疼的不得了,各种构造样例去分析性质... 题意是这样的:给出01字符串.可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所 ...
- 「日常训练」More Cowbell(Codeforces Round #334 Div.2 B)
题意与分析(CodeForces 604B) 题意是这样的:\(n\)个数字,\(k\)个盒子,把\(n\)个数放入\(k\)个盒子中,每个盒子最多只能放两个数字,问盒子容量的最小值是多少(水题) 不 ...
随机推荐
- Redis配置文件(3)常见的配置修改
常见的配置: redis.conf 配置项说明如下: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以 ...
- win7环境中使用notepad++配置python IDE
1, 下载notepad++,并安装 http://notepad-plus-plus.org/download/v6.5.5.html 2, 下载python的win版本,并安装 https://w ...
- Ajax,跨域,nrm
一.ajax 原理 和 使用 ajax,即在不重新加载整个网页的情况下,对网页的某部分进行更新. 下面演示ajax 的实现原理 配置: cd ajax 参考:http://www.expressjs. ...
- vue路由页面加载的几种方法~
懒加载 (1)定义:懒加载也叫延迟加载,即在需要的时候进行加载,随用随载. (2)为什么需要懒加载: 在单页应用中,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要 ...
- java SSM 框架 代码生成器 websocket即时通讯 shiro redis
1. 权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限. 按钮权限: 给角色分配按钮权限. ...
- sql1999语法
1.交叉连接 cross join 左右两个表进行组合,产生笛卡尔积累. 左边每一行分别于右表每一行数据匹配. 2.using using使用的前提是两个表右关联的字段需要对应,两个表的join查询. ...
- ubuntu18.04安装搜狗输入法
首先,安装Fcitx输入框架 sudo apt install fcitx 其次,上搜狗输入法官网下载Linux版本搜狗输入法(32位和64位根据自己情况,在虚拟机上用浏览器下载即可 然后进入相应的下 ...
- springsource-tool-suite插件下载
下载地址: https://spring.io/tools3/sts/all/ 下载页面上的 update sites archives文件
- AJAX 动态加载后台数据 绑定select
<select id="select"> <!--下拉框数据动态加载--> </select> js:(使用jquery) $(document ...
- 用Python代码实现微信跳一跳作弊器
最近随着微信版本的更新,在进入界面有个跳一跳的小游戏,在网上看到技术篇教你用Python来玩微信跳一跳 ( 转载自 " 工科给事中的技术博客 " ) 本文旨在总结,技术全靠大神完成 ...