信息学奥赛一本通2011:【20CSPS提高组】贪吃蛇
2011:【20CSPS提高组】贪吃蛇
时间限制: 2000 ms 内存限制: 262144 KB
提交数: 736 通过数: 180
【题目描述】
草原上有 n 条蛇,编号分别为 1,2,⋯,n。初始时每条蛇有一个体力值ai,我们称编号为 x 的蛇实力比编号为 y 的蛇强当且仅当它们当前的体力值满足 ax>ay,或者 ax=ay 且 x>y。
接下来这些蛇将进行决斗,决斗将持续若干轮,每一轮实力最强的蛇拥有选择权,可以选择吃或者不吃掉实力最弱的蛇:
1.如果选择吃,那么实力最强的蛇的体力值将减去实力最弱的蛇的体力值,实力最弱的蛇被吃掉,退出接下来的决斗。之后开始下一轮决斗。
2.如果选择不吃,决斗立刻结束。
每条蛇希望在自己不被吃的前提下在决斗中尽可能多吃别的蛇(显然,蛇不会选择吃自己)。
现在假设每条蛇都足够聪明,请你求出决斗结束后会剩几条蛇。
本题有多组数据,对于第一组数据,每条蛇体力会全部由输入给出,之后的每一组数据,会相对于上一组的数据,修改一部分蛇的体力作为新的输入。
【输入】
第一行一个正整数 T,表示数据组数。
接下来有 T 组数据,对于第 1 组数据,第一行一个正整数 n,第二行 n个非负整数表示 ai。
对于第 2 组到第 T 组数据,每组数据:
第一行第一个非负整数 k 表示体力修改的蛇的个数。
第二行 2k 个整数,每两个整数组成一个二元组 (x,y),表示依次将 ax的值改为 y。一个位置可能被修改多次,以最后一次修改为准。
【输出】
输出 T 行,每行一个整数表示最终存活的蛇的条数。
【输入样例】
2 3 11 14 14 3 1 5 2 6 3 25
【输出样例】
3 1
【提示】
【样例 1 解释】
第一组数据,第一轮中 3 号蛇最强,1 号蛇最弱。若 3 号蛇选择吃,那么它将在第二轮被 2 号蛇吃掉。因此 3 号蛇第一轮选择不吃,3 条蛇都将存活。
对于第二组数据,3 条蛇体力变为 5,6,25。第一轮中 3 号蛇最强,1 号蛇最弱,若它选择吃,那么 3 号蛇体力值变为 20,在第二轮中依然是最强蛇并能吃掉 2 号蛇,因此 3 号蛇会选择两轮都吃,最终只有 1 条蛇存活。
【样例 2 输入】
2 5 13 31 33 39 42 5 1 7 2 10 3 24 4 48 5 50
【样例 2 输出】
5 3
【数据范围与提示】
对于 20%的数据:n=3。
对于 40%的数据:n≤10。
对于 55%的数据:n≤2000。
对于 70%的数据:n≤5×104。
对于 100%的数据:3≤n≤106,1≤T≤10,0≤k≤105,0≤ai,y≤109。保证每组数据(包括所有修改完成后的)的 ai 以不降顺序排列。
代码:
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=1e6+100,INF=1e9;
struct Node
{int val,num;#define val(i) a[i].val#define num(i) a[i].numbool operator < (const Node y){return val==y.val?num<y.num:val<y.val;}bool operator == (const Node y){return val==y.val && num==y.num;}
}a[N];
int T,n,k,ph,pb;
queue<Node> q;
Node blank={0,0},black={INF,INF};
Node Max(Node x,Node y)
{return (x<y)?y:x;
}
Node Min(Node x,Node y)
{return (x<y)?x:y;
}
bool query(Node la)
{int cnt=0;Node bk=Min(pb<ph?a[pb+1]:black,q.size()?q.back():black);while(1){Node hd=Max(pb<ph?a[ph]:blank,q.size()?q.front():blank);if(a[ph]==hd)ph--;elseif(q.size())q.pop();if(hd==bk)break;hd.val-=la.val;if(bk<hd)break;la=hd;cnt++;}return cnt&1;
}
int main()
{scanf("%d",&T);for(int i=1;i<=T;i++){if(i==1){scanf("%d",&n);for(int j=1;j<=n;j++)scanf("%d",&val(j)),num(j)=j;}else{scanf("%d",&k);for(int j=1,x,y;j<=k;j++){scanf("%d%d",&x,&y);val(x)=y;}}ph=n,pb=1;while(q.size())q.pop();while(pb<=ph){Node x=Max((ph>pb)?a[ph]:blank,q.size()?q.front():blank);if(a[ph]==x)ph--;elseq.pop();x.val-=val(pb);if(x<a[pb+1] && n-pb>1){if(query(x))pb++;break;}q.push(x);pb++;}printf("%d\n",n-pb+1);}return 0;
}
信息学奥赛一本通2011:【20CSPS提高组】贪吃蛇相关推荐
- 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)
信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...
- 《信息学奥赛一本通 提高篇》
提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂
信息学奥赛一本通 提高篇 第六部分 数学基础 第1章 快速幂 https://blog.csdn.net/mrcrack/article/details/82846727 快速幂取模算法如何实现? h ...
- 《信息学奥赛一本通提高篇》第6章 组合数学
例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...
- 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分
信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...
- 信息学奥赛一本通 提高篇 第5章 矩阵乘法
例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...
- 《信息学奥赛一本通 提高篇》 第四部分 数据结构 第4章 倍增求LCA
例题1 点的距离 信息学奥赛一本通(C++版)在线评测系统 例题2 暗的连锁(Poj3417) 信息学奥赛一本通(C++版)在线评测系统 LOj10131 暗的连锁_juruo_xlh-CSDN博客 ...
- 信息学奥赛一本通在线提交地址
信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
最新文章
- 用日志记录LINQ中的所有增删改的SQL语句的方法
- 在ASP程序中访问Access数据库
- 【转载翻译】Debian配置Networking 和 apt-get 源信息 开启root远程登录权限
- VMware NAT模式设置静态IP(可上网)
- tp5连接mongo和mysql_tp5(thinkPHP5)操作mongoDB数据库的方法
- onlyoffice中文字体下载
- opencv的下载与安装
- Qt5+STM32F407+步进电机 | 通过电脑控制步进电机实现:6+2通道、速度可变、运动精确步数的教程——基础知识(2/4)
- spring cloud oauth2 资源服务器配置
- c语言 标准正态分布表,标准正态分布表
- 网络抓取ts文件转mp4_TS格式的视频文件怎么转换成mp4文件。
- 晶体二极管的分类大全
- 网络攻防“三剑客”正式加盟墨者安全 担任首席安全顾问
- 移动魔百盒CM211-1_YS代工_S905L3B_RTL8822C_线刷固件包
- python编译 pyd 工具_windows平台 python生成 pyd文件
- Excel常见技巧GIF示例
- 新手拍短视频技术总结:真实 随性 用心
- 微信公众号官网平台与微信公众号第三方平台的区别
- 最新的iOS14操作系统全面消息重装上阵
- 全景分割相关论文写作与准备笔记
热门文章
- 哥德巴赫猜想c#语言,哥德巴赫猜想 C#
- windows10常见故障排查
- Excel -- 行列数据移动(移动复制)
- unity 物体移动方式的一些笔记
- 重磅报告 | 《中国企业2020:人工智能应用实践与趋势》
- AP3128 DC/DC转换器 小封装,高性能 异步升压10白光LED驱动
- 对深度学习程序进行性能优化之前该理解的几个知识点(一)
- PTA 7-18 新浪微博热门话题
- 助教日志_沈航软件工程评分1.2班第三周作业及总评成绩
- 入侵html数据库,教你如何暴库(网站入侵)