「POI2017」Flappy Bird
传送门
Luogu团队题
解题思路
数据范围不小啊,离散也不行,DP不了,考虑贪心+递推。
我们递推出小鸟可以到达的高度区间。
我们发现,小鸟最好的情况就是在当前基础上,从最下方一直往下飞,或者从最上方一直往上飞。
但是这样在其他情况下不一定可行,那么我们就让它到达尽可能靠近边界的位置,也就是使得可达区间最大化。
如果在飞行过程中可达区间变为空集,那就输出无解,否则就让小鸟飞到终点的越下方越好,因为越往上花费越大。
答案的计算用到了全等三角形的相关知识,可以自己完成。
细节注意事项
- 咕咕咕。
参考代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= c == '-', c = getchar();
while (isdigit(c)) s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
}
const int _ = 500002;
int n, X, x[_], a[_], b[_];
int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
freopen("out.out", "w", stdout);
#endif
read(n), read(X);
for (rg int i = 1; i <= n; ++i)
read(x[i]), read(a[i]), read(b[i]);
int tp = 0, bt = 0;
for (rg int i = 1; i <= n; ++i) {
int dis = x[i] - x[i - 1];
if (tp + dis >= b[i])
tp = (tp - dis - b[i]) & 1 ? b[i] - 1 : b[i] - 2;
else tp += dis;
if (bt - dis <= a[i])
bt = (a[i] - bt + dis) & 1 ? a[i] + 1 : a[i] + 2;
else bt -= dis;
if (tp < bt) { puts("NIE"); return 0; }
}
printf("%d\n", (bt + x[n]) / 2);
return 0;
}
完结撒花 \(qwq\)
「POI2017」Flappy Bird的更多相关文章
- bzoj 4723 [POI2017]Flappy Bird 模拟
[POI2017]Flappy Bird Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 482 Solved: 196[Submit][Status ...
- 【BZOJ4723】[POI2017]Flappy Bird DP
[BZOJ4723][POI2017]Flappy Bird Description <飞扬的小鸟>是一款风靡的小游戏.在游戏中,小鸟一开始位于(0,0)处,它的目标是飞到横坐标为X的某个 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- canvas 制作flappy bird(像素小鸟)全流程
flappy bird制作全流程: 一.前言 像素小鸟这个简单的游戏于2014年在网络上爆红,游戏上线一段时间内appleStore上的下载量一度达到5000万次,风靡一时, 近年来移动web的普及为 ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 自己动手写游戏:Flappy Bird
START:最近闲来无事,看了看一下<C#开发Flappy Bird游戏>的教程,自己也试着做了一下,实现了一个超级简单版(十分简陋)的Flappy Bird,使用的语言是C#,技术采用了 ...
- C语言版flappy bird黑白框游戏
在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird.代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了 ...
随机推荐
- 怪异盒子模型和行内元素的float
设置了float属性的行内元素的display值会变成inline-block 怪异盒子模型: box-sizing:border-box:元素content包含内间距和border
- ANSYS 非线性材料模型简介1 ---常用弹塑性模型
目录 1. 材料非线性 2. 三个准则 2.1 屈服准则 2.2 流动准则 2.3 强化准则 3. 常用弹塑性模型 3.1 双线性等向强化 3.2 多线性等向强化 3.3 非线性等向强化 3.4 双线 ...
- %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91
"%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...
- win10 安装"pip install orange3" 出现LINK : fatal error LNK1158: cannot run 'rc.exe' 错误的解决办法
解决办法: 从(本例使用的是64位的python3.6 注意:如果python的版本是32位,则使用x86:如果是64位,则使用x64;) 复制一下两个文件 rc.exe rcdll.dll 到
- Spring Boot 项目本地运行无异常,部署到 Linux 服务器运行报错:java.lang.ClassNotFoundException
一 背景 最近在用 Springboot 开发项目 A,引了小伙伴开发的模块 B,本地起服务,运行的好好的,等部署到服务器上,一运行就报错:Caused by: java.lang.ClassNotF ...
- MySQL8.0 ROW_NUMBER、RANK、DENSE_RANK窗口函数 分组排序排名
MySQL8.0 (ROW_NUMBER)窗口函数 排名 暂时理解函数意义,后面再进行优化,如果有关变量排序,查看这个大哥的 mysql的分组排序和变量赋值顺序 先查看一个例子: # 按照每科课程分数 ...
- UDP通讯代码
UDP客户端代码: import socket # 创建套接字 socket.AF_INET:IPV4 socket.SOCK_DGRAM:UDP协议 udp_client=socket.socket ...
- Ubuntu将Python3软连接到Python
sudo ln -s /usr/bin/python3 /usr/bin/python
- 虚拟机安装CentOS详细操作
使用VMware安装CentOS 6.4 环境:Windows7 ,VMware Workstation10,CentOS6.4 为什么选择CentOS ? 主流:目前的Linux操作系统主要应用于生 ...
- JS经典理解例子
1. var name = 'the window'; var obj = { name:"my obj", getNameFunc:function(){ return func ...