[loj3527]地牢游戏
当英雄能力值$\ge 10^{7}$时,即能战胜所有敌人,简单预处理即可
若英雄能力值在$[2^{k},2^{k+1})$中,对敌人分类讨论:
1.若$s_{i}\le 2^{k}$,其必然会战胜这些敌人
2.若$s_{i}>2^{k}$,考虑快速找到其第一次战胜这些敌人的时刻,注意到战胜这些敌人后,其能力值必然$\ge 2^{k+1}$,那么至多发生$\log 10^{7}$次(之后其能力值即$\ge 10^{7}$)
下面,考虑用倍增来"快速找到其第一次战胜这些敌人的时刻",先假设对于所有第2类敌人其都会战败,在此情况下最小的差距,由此即可在$o(k)$的复杂度内找到该时刻
(假设初始能力值为0,且仍能战胜第1类敌人,也需要统计过程中能力值的增长)
由于空间问题,可以将范围修改为$[8^{k},8^{k+1})$,那么至多发生$8\log 10^{7}$次
时间复杂度为$o(n\log^{2}n)$,可以通过

1 #include<bits/stdc++.h>
2 #include"dungeons.h"
3 using namespace std;
4 #define N 400005
5 #define L 24
6 #define LL 8
7 #define ll long long
8 int n,s[N],p[N],w[N],l[N],to[LL][N][L];
9 ll tot[N],sum[LL][N][L],delta[LL][N][L];
10 void init(int nn,vector<int>ss,vector<int>pp,vector<int>ww,vector<int>lll){
11 n=nn;
12 for(int i=0;i<n;i++){
13 s[i]=ss[i];
14 p[i]=pp[i];
15 w[i]=ww[i];
16 l[i]=lll[i];
17 }
18 for(int i=n-1;i>=0;i--)tot[i]=tot[w[i]]+s[i];
19 for(int i=0;i<LL;i++){
20 to[i][n][0]=n;
21 delta[i][n][0]=1e18;
22 for(int j=0;j<n;j++)
23 if (s[j]<=(1<<3*i)){
24 to[i][j][0]=w[j];
25 sum[i][j][0]=s[j];
26 delta[i][j][0]=1e18;
27 }
28 else{
29 to[i][j][0]=l[j];
30 sum[i][j][0]=p[j];
31 delta[i][j][0]=s[j];
32 }
33 for(int j=1;j<L;j++)
34 for(int k=0;k<=n;k++){
35 int x=to[i][k][j-1];
36 to[i][k][j]=to[i][x][j-1];
37 sum[i][k][j]=sum[i][k][j-1]+sum[i][x][j-1];
38 delta[i][k][j]=min(delta[i][k][j-1],delta[i][x][j-1]-sum[i][k][j-1]);
39 }
40 }
41 }
42 ll simulate(int x,int yy){
43 ll y=yy,time=0;
44 while ((x!=n)&&(y<(1<<L))){
45 int k;
46 for(int i=0;i<LL;i++)
47 if (((1<<3*i)<=y)&&(y<(1<<3*i+3))){
48 k=i;
49 break;
50 }
51 for(int i=L-1;i>=0;i--)
52 if (delta[k][x][i]>y){
53 y+=sum[k][x][i];
54 x=to[k][x][i];
55 }
56 if (x!=n){
57 y+=s[x];
58 x=w[x];
59 }
60 time++;
61 }
62 if (x!=n)y+=tot[x];
63 return y;
64 }
65 int main(){
66 freopen("1.in","r",stdin);
67 scanf("%*s");
68 int n,m,x,y;
69 vector<int>s,p,w,l;
70 scanf("%d%d",&n,&m);
71 for(int i=1;i<=n;i++){
72 scanf("%d",&x);
73 s.push_back(x);
74 }
75 for(int i=1;i<=n;i++){
76 scanf("%d",&x);
77 p.push_back(x);
78 }
79 for(int i=1;i<=n;i++){
80 scanf("%d",&x);
81 w.push_back(x);
82 }
83 for(int i=1;i<=n;i++){
84 scanf("%d",&x);
85 l.push_back(x);
86 }
87 init(n,s,p,w,l);
88 printf("TRUE\n");
89 for(int i=1;i<=m;i++){
90 scanf("%d%d",&x,&y);
91 simulate(x,y);
92 }
93 }
[loj3527]地牢游戏的更多相关文章
- [LeetCode] Dungeon Game 地牢游戏
		
The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. ...
 - ✡ leetcode  174. Dungeon Game  地牢游戏  --------- java
		
The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. ...
 - [leetcode]174. Dungeon Game地牢游戏
		
The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. ...
 - [LeetCode] 174. Dungeon Game 地牢游戏
		
The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. ...
 - 虚拟现实外包公司—VR游戏你不知道的以及你该知道的WebVR
		
VR基础——原理其实很简单 我们地球人之所以能够看到立体的景物,是因为双眼可以各自独立看东西,也就是左眼只能看到左眼的景物,而右眼只能看到右眼的景物.因为人类左右两眼有间距,造成两眼的视角有些细微的差 ...
 - CodeCombat编程游戏
		
一. 介绍 官方网站:http://cn.codecombat.com/ 项目地址:https://github.com/codecombat/codecombat CodeCombat 是一个通过玩 ...
 - 2000G电脑大型单机游戏合集
		
激活码 游戏名称(ctrl+F查找) 下载链接005875 艾迪芬奇的记忆 游戏下载链接http://pan.baidu.com/s/1t2PYRAj546_1AcOB-khJZg554158 暗影: ...
 - LeetCode(120):三角形最小路径和
		
Medium! 题目描述: 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上. 例如,给定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] ...
 - 2018-2019学年第一学期Java课设--魔塔
		
目录 Magic-Towers 一.团队名称.团队成员介绍.任务分配 团队名称:MoTa 团队成员介绍 任务分配 二.项目简介 三.项目采用技术 四.项目亮点 主界面显示主要信息功能 游戏动画 五.项 ...
 
随机推荐
- 实现js读取Excel数据
			
如何通过js去读取excel中的数据 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
 - 数值分析:幂迭代和PageRank算法
			
1. 幂迭代算法(简称幂法) (1) 占优特征值和占优特征向量 已知方阵\(\bm{A} \in \R^{n \times n}\), \(\bm{A}\)的占优特征值是量级比\(\bm{A}\)所有 ...
 - 题解 [POI2013]SPA-Walk
			
题目传送门 题目大意 给出两个长度为 \(n\) 的 \(01\) 串,问是否可以通过某一位把 \(s\) 变为 \(t\),但是中途不能变为 \(k\) 个 \(01\) 串中任意一个,问是否可行. ...
 - 洛谷4035 JSOI2008球形空间产生器 (列柿子+高斯消元)
			
题目链接 qwq 首先看到这个题,感觉就应该从列方程入手. 我们设给定的点的坐标矩阵是\(x\),然后球心坐标\(a_1,a_2....a_n\) 根据欧几里得距离公式,对于一个\(n维空间\)的第\ ...
 - 微信小程序_快速入门01
			
这段时间,嗯,大四课程已经结束了,工作也已经找到了,但是呢,到公司报道的时间还没到,哈哈,马上就开始人生的第一份工作了,怎么说确实有点期待~ 在这段时间一方面为第一份工作做各种准备,另一方面也没有停止 ...
 - CVE-2017-11882 漏洞分析总结 新手漏洞分析详细教程
			
CVE-2017-11882分析总结 注: 这篇随笔记录了CVE-2017-11882漏洞分析的整个过程,并介绍了相关调试软件的使用 漏洞信息 CVE-2017-11882属于缓冲区溢出类型漏洞,产生 ...
 - Win7恢复注册表
			
前言 安装仿真实验环境的时候,按照指引把杀软关了,然后出现了"不是有效Win32应用程序"的错误,bd了一下解决方案,爬到了一篇文章:删除注册表中的.exe然后重启,然后,所有的e ...
 - netty系列之:使用netty实现支持http2的服务器
			
目录 简介 基本流程 CleartextHttp2ServerUpgradeHandler Http2ConnectionHandler 总结 简介 上一篇文章中,我们提到了如何在netty中配置TL ...
 - 巧用 CSS3 filter(滤镜) 属性
			
原文链接:CSS3 filter(滤镜) 属性 效果预览 filter: grayscale(100%); 定义和使用 filter 属性定义了元素(通常是<img>)的可视效果(例如:模 ...
 - Kafka消息(存储)格式及索引组织方式
			
要深入学习Kafka,理解Kafka的存储机制是非常重要的.本文介绍Kafka存储消息的格式以及数据文件和索引组织方式,以便更好的理解Kafka是如何工作的. Kafka消息存储格式 Kafka为了保 ...