2010年风靡全球的“水果忍者”游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以完成游戏规定的任务。如果玩家可以一刀砍下画面当中一连串的水果,则会有额外的奖励,如图1所示。

图 1

现在假如你是“水果忍者”游戏的玩家,你要做的一件事情就是,将画面当中的水果一刀砍下。这个问题看上去有些复杂,让我们把问题简化一些。我们将游戏世界想象成一个二维的平面。游戏当中的每个水果被简化成一条一条的垂直于水平线的竖直线段。而一刀砍下我们也仅考虑成能否找到一条直线,使之可以穿过所有代表水果的线段。

图 2

如图2所示,其中绿色的垂直线段表示的就是一个一个的水果;灰色的虚线即表示穿过所有线段的某一条直线。可以从上图当中看出,对于这样一组线段的排列,我们是可以找到一刀切开所有水果的方案的。

另外,我们约定,如果某条直线恰好穿过了线段的端点也表示它砍中了这个线段所表示的水果。假如你是这样一个功能的开发者,你要如何来找到一条穿过它们的直线呢?

输入格式:

输入在第一行给出一个正整数N(≤),表示水果的个数。随后N行,每行给出三个整数x、y​1​​、y​2​​,其间以空格分隔,表示一条端点为(和(的水果,其中y​1​​>y​2​​。注意:给出的水果输入集合一定存在一条可以将其全部穿过的直线,不需考虑不存在的情况。坐标为区间 [ 内的整数。

输出格式:

在一行中输出穿过所有线段的直线上具有整数坐标的任意两点(和(,格式为 y​1​​。注意:本题答案不唯一,由特殊裁判程序判定,但一定存在四个坐标全是整数的解。

输入样例:

5
-30 -52 -84
38 22 -49
-99 -22 -99
48 59 -18
-36 -50 -72

输出样例:

-99 -99 -30 -52题意:给出一些平行于y轴的线段,要求找到一条直线可以穿过(经过端点也可)所有线段,输出直线上的两个点,要求都是整数。注意:如果只有一条线段,自己本身就是答案,可能存在多条直线重合,只需要记录y最小的上端点和y最大的下端点。方法:根据求凸包的原理,分别用栈辅助去除使得上端点连线上凸的点以及使得下端点连线下凹的点,存下剩下的点,可以连成两条折线,那么满足条件的直线就在两线之间,枚举折线的每个线段,找到满足条件的。输入样例可以得到如下图:

黄色线是栈里保存的点连成的折线。

代码:
#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
#include <vector>
#include <algorithm>
#define inf 0x3f3f3f3f
using namespace std;typedef long long ll;
typedef pair<int,int> pa;
int n;
vector<int> p;
pa u[10000],d[10000];
int uc,dc;
map<int,int> vis,up,down;
int lx,ly,rx,ry;
inline bool pupl(const pa &p1,const pa &p2,const pa &p3) {return (ll)(p3.first - p2.first) * (p2.second - p1.second) > (ll)(p2.first - p1.first) * (p3.second - p2.second);
}
inline bool pdownl(const pa &p1,const pa &p2,const pa &p3) {return (ll)(p3.first - p2.first) * (p2.second - p1.second) < (ll)(p2.first - p1.first) * (p3.second - p2.second);
}
int main() {int x,y1,y2;scanf("%d",&n);for(int i = 0;i < n;i ++) {scanf("%d%d%d",&x,&y1,&y2);if(vis[x] == 0) {p.push_back(x);vis[x] = 1;up[x] = y1;down[x] = y2;}else {up[x] = min(up[x],y1);down[x] = min(down[x],y2);}}if(p.size() == 1) {lx = p[0];ly = up[p[0]];rx = p[0];ry = down[p[0]];}else {sort(p.begin(),p.end());for(int i = 0;i < p.size();i ++) {while(uc >= 2 && pupl(u[uc - 2],u[uc - 1],pa(p[i],up[p[i]]))) uc --;u[uc ++] = pa(p[i],up[p[i]]);while(dc >= 2 && pdownl(d[dc - 2],d[dc - 1],pa(p[i],down[p[i]]))) dc --;d[dc ++] = pa(p[i],down[p[i]]);}int i,j;for(i = 0;i < uc - 1;i ++) {for(j = 0;j < dc;j ++) {if(pupl(u[i],d[j],u[i + 1])) break;}if(j == dc) break;}if(i == uc - 1) {for(i = 0;i < dc - 1;i ++) {for(j = 0;j < uc;j ++) {if(pdownl(d[i],u[j],d[i + 1])) break;}if(j == uc) break;}lx = d[i].first;ly = d[i].second;rx = d[i + 1].first;ry = d[i + 1].second;}else {lx = u[i].first;ly = u[i].second;rx = u[i + 1].first;ry = u[i + 1].second;}}printf("%d %d %d %d",lx,ly,rx,ry);
}

转载于:https://www.cnblogs.com/8023spz/p/10388797.html

L3-012 水果忍者 (30 分)相关推荐

  1. 【CCCC】L3-012 水果忍者 (30分),,枚举斜率

    problem L3-012 水果忍者 (30分) 2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与 ...

  2. L3-012 水果忍者 (30 分)-PAT 团体程序设计天梯赛 GPLT

    2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以 ...

  3. 7-45 水果忍者 (30 point(s))

    2010年风靡全球的"水果忍者"游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以 ...

  4. 2017级C语言大作业 - 水果忍者

    水果忍者 C语言作业 分享17级同学大一上学期用C语言实现的水果忍者.分步骤代码.图片音乐素材.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1i-e_MVChl ...

  5. html 水果忍者 教程,新手手册:《水果忍者》游戏设定详解

    您可能感兴趣的话题: 水果忍者 核心提示:Halfbrick Studios制作.<水果忍者Fruit Ninja>是一款简单的休闲游戏,目的只有一个--砍水果! Zen:图标为苹果的Ze ...

  6. 前端制作水果忍者小游戏

    演示地址​​​(第一次打开有点卡哦)水果忍者小游戏http://kiss-rebounds.gitee.io/fruitninja-game/ 水果忍者小游戏 - 经典版点击这里 实现了得分和连击等信 ...

  7. 水果忍者激战版的开发心得

    先放下载地址:http://dl.uu.cc/p2p/(在android 手机浏览器上输入后点击下载就OK) 去年8月份一开始接到任务,是要做一个手机间实时通信的桥梁,大家都知道国外的视频通话早已成熟 ...

  8. C/C++实现水果忍者(一) 启动

    文章目录 思路和想法 起步:显示背景 思路和想法 水果忍者是经典的小游戏. <水果忍者>(Fruit Ninja),是由澳大利亚公司Halfbrick Studios开发的一款休闲益智类游 ...

  9. [unity3d]水果忍者-界面搭建

    今天开始用Unity3D做一下水果忍者的游戏,Keep study very day! 效果图: 实现步骤: 1.贴图的创建 , 这里的Pixel Inset中X,Y,Width,Height是贴图的 ...

最新文章

  1. ASP.net获取当前url各种属性(文件名、参数、域名 等)的方法
  2. sftp 中文乱码 连接后_sftp服务器中文乱码
  3. linux sh expr冒号,linux expr命令参数及用法详解
  4. 【转】JavaScript中的匿名函数及函数的闭包
  5. mini车f和r的区别_雪铁龙也造出了“老头乐”,外观复古时尚,叫板宏光MINI?...
  6. hdfs文件系统无法在网页上显示
  7. html 内容写入数据库中,FoxPro数据库写入html文件中
  8. Scala语言会取代Java的吗?
  9. mysql通过正则表达式根据手机号判断运营商
  10. wps服务器无响应是什么原因,windows10系统运行wps无响应的解决方案
  11. nginx的log_format日志格式和字段介绍
  12. 汉字转拼音,用户表增加拼音字段,并将汉字姓名对应的拼音赋值给拼音字段
  13. 求N个数的最大公约数和最小公倍数以及Hankson逆问题(python)
  14. iOS10全新方法实现推送+deviceToken无法获取或无效的解决
  15. 简单SOPC实例开发任务——控制led灯闪烁
  16. 网络爬虫的 “ 黑洞 ”
  17. android 记录总结安装Apk问题
  18. 「老文补发」写在GitBubble上线之后
  19. oracle到神通,我的ORACLE笔记(三)
  20. opencv利用HSV图像进行颜色筛选

热门文章

  1. 多重纹理——像素着色器
  2. JAVA 序列化http://www.importnew.com/17964.html
  3. VMware中使用U盘PE系统
  4. OracleLinux-R6-U5-Server-x86_64安装,及oracle11g安装
  5. [随笔所想] 学英语打卡2000天碎碎念
  6. 计算机专业大几用到移动硬盘,16款移动硬盘大横评:速度能差这么多? 一比吓一跳...
  7. 【开源教程11】疯壳·开源蓝牙心率防水运动手环-整机功能代码讲解
  8. SpringMVC工作流程
  9. H5互动游戏推广引流是做什么的?详解游戏引流推广方式
  10. java单根结构_Java语言程序设计中的单根结构