A 大地魂力
|
问题描述
奶牛贝西认为,要改变世界,就必须吸收大地的力量,贝西把大地的力量称为魂力。要吸取大地的魂力就需要在地上开出洞穴来。
大地可以看成一个数轴,农夫约翰将不断地在大地上的选一个整数点来开一个洞穴,这个洞穴能分别从他左右两边第一个已经开出的洞穴吸取大地之魂力,吸取到的魂力数量等于对应洞穴的坐标。如果某一个方向没有洞穴,那么这个洞穴就无法从这个方向吸收大地之魂力。约翰可以在一个坐标点上开多个洞穴,每次吸收的大地之魂的数量都会累加。
现在按时间先后给出约翰的开洞的操作序列,约翰想知道他一共能吸收多少大地之魂。结果可能很大,你只需要告诉他模10^9+7 之后的结果。
输入格式
一行,5个整数 n, A, B, C, X1。其中n代表操作序列的长度。
由于n比较大,操作序列a将不通过输入数据给出,而是通过下列计算方法:
对于 ,2<=i<=n, Xi = ( A*(Xi-1)2 + B*Xi-1 + C ) mod (109+7)
对于操作序列a,它的第i项ai = (Xi mod n) + 1 1<=i<=n
ai就表示第i次操作打开的洞穴的坐标
输出格式
一个整数,表示计算结果
样例输入
5 2 3 2 3
样例输出
18
提示
操作序列为 4 5 2 3 5
操作1:坐标4位置打洞,吸取魂力0
操作2:坐标5位置打洞,吸取魂力4
操作3:坐标2位置打洞,吸取魂力4
操作4:坐标3位置打洞,吸取魂力6
操作5:坐标5位置打洞,吸取魂力4
总魂力18
n<=6000000 A,B,C,X1<=10^9+7
【题目分析】
对于 a[i]=i 的部分分,答案等于 1+2+……+n-1
对于 n<=1000 的部分分,每次插入之后暴力找前驱后继
对于 n<=100000 的部分分,用 set 维护当前的洞穴集合,每次插入之后用 set 寻找前驱后继
满分做法:把操作序列存起来, 记录下每个坐标点出现的次数, 然后把最后的序列建成链表,
倒着考虑操作,相当于每次删除一个点,直接用链表维护,复杂度 O(n)
/*
操作序列: 7, 2, 10, 9, 4, 9, 10, 4
*/
【参考代码】
#include<cstdio>
#include<cctype>
#define maxn 6000003
using namespace std;
int n, a, b, c, ans;
int A[maxn], Cnt[maxn];
char buf[ << ], *p1 = buf, *p2 = buf, obuf[ << ], *O = obuf;
struct Format {
int Left, Right;
}List[maxn];
namespace Ironclad_Programming {
#define R register int
#define For(i, s, n) for (R i = s; i <= n; ++ i)
#define ll long long
#define Getch() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1 ++)
#define MOD 1000000007
inline int read() {
int x = , f = ;
char ch = Getch();
while(!isdigit(ch)){if (ch == '-')f = -; ch = Getch();}
while(isdigit(ch))x = x * + (ch ^ ), ch = Getch();
return x * f;
}
void write(ll x) {
if (x > ) write(x / );
*O ++ = x % + '';
}
void ini() {
n = read(), a = read(), b = read(), c = read(), A[] = read();
For (i, , n)
A[i] = (((ll)a * A[i - ] % MOD * A[i - ] % MOD) % MOD + (ll)b * A[i - ] % MOD + c) % MOD;
For (i, , n) {
A[i] = A[i] % n + ;
++ Cnt[A[i]];
}
}
namespace solve {
int Last = ;
void Link() {
For (i, , n)
if (Cnt[i]) {
List[i].Left = Last;
List[Last].Right = i;
Last = i;
}
}
void Del_Back() {
for (R i = n; i; -- i) {
(ans += (List[A[i]].Left + List[A[i]].Right) % MOD) %= MOD;
if (!(-- Cnt[A[i]])) {
List[List[A[i]].Left].Right = List[A[i]].Right;
List[List[A[i]].Right].Left = List[A[i]].Left;
}
}
}
void executive() {
Link();
Del_Back();
write(ans);
}
}
void Main() {
ini();
solve::executive();
fwrite(obuf, O - obuf, , stdout);
}
#undef R
#undef For
#undef ll
#undef Getch
#undef MOD
}
int main() {
Ironclad_Programming::Main();
return ;
}
A 大地魂力的更多相关文章
- 和我一起打造个简单搜索之Logstash实时同步建立索引
用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...
- ie6下固定位置的实现
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【开源】使用Angular9和TypeScript开发RPG游戏
RPG系统构造 通过对于斗罗大陆小说的游戏化过程,熟悉Angular的结构以及使用TypeScript的面向对象开发方法. 项目地址 人物 和其他RPG游戏类似,游戏里面的人物角色大致有这样的一些属性 ...
- 【开源】使用Angular9和TypeScript开发RPG游戏(补充了Buffer技能)
RPG系统构造 通过对于斗罗大陆小说的游戏化过程,熟悉Angular的结构以及使用TypeScript的面向对象开发方法. Github项目源代码地址 RPG系统构造 ver0.02 2020/03/ ...
- HBase 监控 | HBase Metrics 初探(一)
前言:对于任意一个系统而言,做好监控都是非常重要的,HBase也不例外.经常,我们会从JMX中获取相关指标来做展示.对HBase进行监控,那这些指标是怎么生成的呢?如果你想自定义自己的监控指标又该怎么 ...
- 【开源】使用Angular9和TypeScript开发RPG游戏(20200410版)
源代码地址 通过对于斗罗大陆小说的游戏化过程,熟悉Angular的结构以及使用TypeScript的面向对象开发方法. Github项目源代码地址 RPG系统构造 ver0.03 2020/04/10 ...
- [开源]eCharts配置简化包OptionCreator[typescript版]
eCharts存在问题 配置eCharts的option,对于大部分的开发者来说,复杂情况下是一件繁琐的事情.为什么繁琐,大致有以下这些原因 大小写敏感:在没有IDE的智能提示下,很容易写错,而且即使 ...
- php大力力 [051节] 支付宝支付.申请支付资质,等待审核中
https://beecloud.cn/doc/payapply/?index=6 支付宝支付申请支付资质 一.注册支付宝用户 在支付宝官网注册成为用户 二.签约对应支付产品 应用集成支付宝支付,需要 ...
- 力软信息化系统快速开发框架 web端+winform端
力软信息化系统快速开发框架是一套集权限管理+快速开发+动态接口+通用组件+动态UI于一体的全新.net信息化快速开发框架.力软信息化系统快速开发框架的使用,大大地缩短了开发周期,提高了软件质量,同时也 ...
随机推荐
- IIS6.0文件解析漏洞和短文件名漏洞复现
一.IIS6.0文件解析漏洞 1.ASP一句话木马的准备 新建木马文件“muma.txt”,将“我asp是一句话木马:<%eval request("asp")%>”写 ...
- 第六章、Vue项目预热
6-5. (1). (2).引入reset.css及border.css (3).解决手机点击延迟300ms的问题 a.安装 b.引入fastclick 6-2.项目的整体架构 src--->整 ...
- ubuntu1804自带的vim和vi都是用什么版本?
之前搜索vim一些命令时,经常看到有人说ubuntu自带的vim是是vim.tiny的,功能不全. 什么需要先卸载,再重装,真的是这样吗? 我查了一下,vim的版本号 vim --version vi ...
- 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...
- 【tomcat系列】配置tomcat远程访问
当程序部署在tomcat上后,需要监测tomcat的性能和监测tomcat的各项指标,如内存使用情况,cpu使用情况,jvm实际情况等,对于这些指标的监控,tomcat提供了访问入口,然而tomcat ...
- django 从零开始 制作一个图站 1环境的配置以及测试本地服务器
先使用用virtualenv建立一个虚拟环境 使用pycharm 建立一个django项目 选择虚拟环境和建立一个应用app 其中 tuzhan是项目根目录 user是我们的项目app 中间一些项目文 ...
- MongoDB复制集概念架构浅析
一.复制集的作用 (1) 高可用 防止设备(服务器.网络)故障. 提供自动failover 功能. 技术来保证数 (2) 灾难恢复 当发生故障时,可以从其他节点恢复. (3) 功能隔离 用于分析.报表 ...
- Java反射之构造方法反射
上一篇Java反射之Class类我们介绍了java反射的关键类Class, 反射就是由一个java类映射得到一个java类. 所以,我们自然能想到,一个类中应该有哪些属性,这里做个比方,人有名字年龄等 ...
- SpringMVC框架——集成RESTful架构
REST:Representational State Transfer 资源表现层状态转换 Resources 资源 Representation 资源表现层 State Transfer 状态转换 ...
- macOS开发:调整NSImage尺寸大小
原文链接 extension NSImage { func resize(_ to: CGSize, isPixels: Bool = false) -> NSImage { var toSiz ...