864 AlvinZH的儿时回忆----蛙声一片

题目链接:https://buaacoding.cn/problem/865/index

思路

中等题。难点在于理解题意!仔细读题才能弄懂题目规则。整个过程是通过模拟位置变化进行的。

第一个问题是AlvinZH的情绪变化,忽略某一位置的青蛙条件是:刚刚经历失败,即前一位置没有抓到青蛙。

第二个问题是什么情况抓到青蛙:不灰心的情况遇到多只青蛙,除去跳的最远的青蛙(可能多只),剩下的都被抓。

分析

像这种数据循环利用且不断变化,但是有序的数据集,应该想到使用优先队列。优先队列可以保证所有青蛙按一定顺序排列。

有些同学使用优先队列数组,有点浪费空间。这里只需要一个优先队列即可,具体可看代码注释。

考点:优先队列。

难点:分析出各种情况,不能乱,逻辑要清晰。

参考代码

//
// Created by AlvinZH on 2017/9/29.
// Copyright (c) AlvinZH. All rights reserved.
//#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define MaxSize 100005using namespace std;struct Frog {int pos;//位置int dis;//跳程bool operator < (const Frog& f) const {if(pos != f.pos) return  pos > f.pos;//小值优先return dis < f.dis;//大值优先}
};int main()
{int T, n;Frog nowF;scanf("%d", &T);while (T--){scanf("%d", &n);priority_queue<Frog> Q;for (int i = 0; i < n; i++) {scanf("%d %d", &nowF.pos, &nowF.dis);Q.push(nowF);}int numF = 0;bool Fail = false;//初始不灰心while (!Q.empty()){nowF = Q.top();//距离最近且跳的最远的青蛙Q.pop();if(!Fail){Fail = true;Frog nextF = Q.top();while (!Q.empty() && nextF.pos == nowF.pos)//存在多只{Q.pop();if(nextF.dis == nowF.dis)//比翼双飞{nextF.pos += nextF.dis;Q.push(nextF);}else//抓住它{numF++;Fail = false;}nextF = Q.top();}nowF.pos += nowF.dis;Q.push(nowF);}else//一起忽略,记得pop这些青蛙{Fail = false;Frog nextF = Q.top();while (!Q.empty() && nextF.pos == nowF.pos){Q.pop();nextF = Q.top();}}}printf("%d %d\n", nowF.pos, numF);}
}

转载于:https://www.cnblogs.com/AlvinZH/p/7698978.html

2016级算法第一次练习赛-E.AlvinZH的儿时回忆——蛙声一片相关推荐

  1. 2016级算法期末模拟练习赛-B.AlvinZH的青春记忆I

    1083 AlvinZH的青春记忆I 思路 中等题,动态规划. 简化题意,一个环上取数,数不可相邻,取取得数之和最大值. 环不好表示,可以解开变成一列数,那么答案应为下列两种情况较大者. ①:取第一个 ...

  2. 2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III

    1119 AlvinZH's Fight with DDLs III 思路 难题,最小点覆盖. 分析题意,某一个任务,既可以在笔记本A的 \(a\) 模式下完成,也可以在笔记本B的 \(b\) 模式下 ...

  3. 2016级算法第五次上机-E.AlvinZH的学霸养成记IV

    1039 AlvinZH的学霸养成记IV 思路 难题,最大二分图匹配. 难点在于如何转化问题,n对n,一个只能攻击一个,判断是否存在一种攻击方案我方不死团灭对方.可以想到把所有随从看作点,对于可攻击的 ...

  4. 2016级算法期末上机-F.中等·AlvinZH's Fight with DDLs II

    1118 AlvinZH's Fight with DDLs II 思路 中等题,贪心. 理解题意,每次攻击中,可以使某个敌人生命值-1,自己生命值减去∑存活敌人总攻击力. 贪心思想,血量少攻击高的要 ...

  5. 2016级算法期末模拟练习赛-A.wuli51和京导的毕业旅行

    1063 wuli51和京导的毕业旅行 思路 中等题,二分+贪心. 简化题意,将m+1个数字分成n份,ans为这n段中每段数字和的最大值,求ans最小值及其方案. 对于这种求最小的最大值,最常用的方法 ...

  6. 2016级算法第六次上机-D.AlvinZH的学霸养成记V

    1081 AlvinZH的学霸养成记V 思路 中等题,计算几何. 这是一个排序问题,按极角排序.可以转化为叉积的应用,对于点A和B,通过叉积可以判断角度大小,共线时再判断距离. 叉积的应用.OA × ...

  7. 2016级算法第四次上机-C.AlvinZH的1021实验

    975 AlvinZH的1021实验 思路 贪心,简单题. 题目已经说明有且只有一种方法表示所求数,简单列举几项可以发现只由前i个砝码会可以表示[1,∑Wi]的所有数的.先找到最大需要的砝码Wi,问题 ...

  8. 2016级算法第六次上机-A.Bamboo之寻找小金刚

    Bamboo之寻找小金刚 分析 可以抽象为许多连续线段,分别计数左拐和右拐的个数.考察叉积的基础应用. 假设ABC三点构成一个夹角∠ABC,B就是拐点,AC是辅助形成夹角.考虑线段AB和BC形成的向量 ...

  9. 2016级算法第四次上机-B ModricWang的序列问题

    1019 ModricWang的序列问题 思路 此题题意非常清晰,给定一个序列,求出最长上升子序列的长度.从数据规模来看,需要\(O(nlogn)\) 的算法. \(O(nlongn)\) 求最长上升 ...

最新文章

  1. 24行代码-Leecode 2063. 所有子字符串中的元音——Leecode周赛系列
  2. Apache Camel –从头开始开发应用程序(第2部分/第2部分)
  3. 深入理解 Git 的实现原理
  4. mysql b 树 锁_mysql索引B+树、MVCC、锁一文搞懂
  5. java mysql分层_java-数据库连接,分层实现增删改查测试
  6. 街霸5 android,MD街头霸王5免安装版
  7. 当当图书排行榜html,最-当当图书
  8. 第十三届蓝桥杯省赛模拟赛
  9. Qt|表格代理的实现及使用代码qtableview和qtablewidget均适用
  10. 19.Linux中字符处理sort和uniq命令详解
  11. linux ubantu最新版本,过去十年最佳的Ubuntu版本
  12. python matplotlib cannot import name ‘artist‘ from ‘matplotlib‘
  13. vscode 中怎么打开资源管理器?
  14. cloudfare dns_Cloudflare配置动态dns(ddns)
  15. 半次元热门图片,各种好看的cosplay小姐姐,统统爬取收藏
  16. 思维导图 基础篇(07)擎绘系统-阅读导图
  17. swiper 轮播 多行多列 横向排列
  18. css元素类型哪几种
  19. java email qq邮箱 与 阿里企业邮箱/个人邮箱
  20. ros入门 工程目录结构、节点通信方式、基本操作命令

热门文章

  1. Java-Web Response响应和Request请求
  2. Oracle Buffer-cache (数据高速缓存)作用概述
  3. win10怎么设置开机启动项目_开机启动项怎么设置呢?禁用自启动程序
  4. 【分享】Oracle 常用运维命令大全
  5. android音频开发6,Android 音视频开发(一) : 通过三种方式绘制图片
  6. CNCF 新增两个孵化项目 | 云原生生态周报 Vol. 58
  7. linux改英语环境,CentOS6.8中/英文环境切换教程图解
  8. linux 自定义shell命令,如何在Linux中自定义bash命令提示符
  9. 如何搭建socks5和ss节点_以太坊区块链搭建与使用(三)-联盟链
  10. Python的zip