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信息化快速开发框架.力软信息化系统快速开发框架的使用,大大地缩短了开发周期,提高了软件质量,同时也 ...
随机推荐
- blender 2.8 [学习笔记-04] 编辑模式-网格拆分
在编辑模式下
- rest framework serializer
串行器 扩大串行的用处是什么,我们想地址.然而,这不是一个简单的问题,它会采取一些严重的设计工作. -罗素基思-马吉,Django的用户组 串行器允许诸如查询集和模型实例复杂的数据转换为原生的Pyth ...
- JavaScript实现集合与字典
JavaScript实现集合与字典 一.集合结构 1.1.简介 集合比较常见的实现方式是哈希表,这里使用JavaScript的Object类进行封装. 集合通常是由一组无序的.不能重复的元素构成. 数 ...
- linux最常用命令记录(一)
一.vim个人最常用设置: vim .vimrc 然后添加以下内容 set nu set tabstop=4 set encoding=utf-8 二.查看磁盘空间相关命令 1.df -h 查看硬 ...
- Openwrt 路由器上 安装 svn server
Openwrt 上也可以搭建 svn 服务了,这样就不用开着 ubuntu 了,省电. 在后台打开 ssh 服务,或者使用 telnet 服务,使用 putty 登录路由器. 如下图所示,这里刷的是 ...
- [android]R.class里有ID,onCreate方法里调用findViewById返回空
在做android练习,一个新手错误,记录一下: 在练习android权威编程指南时,第5章 第二个Activity部分练习,出现标题问题,代码还原如下: protected void onCreat ...
- 手把手教你用Abp vnext构建API接口服务
ABP是一个开源应用程序框架,该项目是ASP.NET Boilerplate Web应用程序框架的下一代,专注于基于ASP.NET Core的Web应用程序开发,也支持开发控制台应用程序. 官方网站: ...
- Spark入门(一)--用Spark-Shell初尝Spark滋味
Spark-Shell的使用 执行scala命令的spark-shell 进入spark的sbin目录,打开键入 ./spark-shell 即可进入spark-shell的目录 spark-shel ...
- ant-design-pro 如何打包成 本地html,双击即可查看
由于 ant-design-pro 的 mock 是一个单独的服务,所以没有办法整合到一起打包.暂时我是没有找到. 所以解决方案就是不用 mock . 由于 系统有异步调取,所以一旦有异步调取就会失败 ...
- 关于IDEA的使用中,连接数据库console出现乱码的情况
本人在连接数据库时也不算是出现乱码,因为乱码的解决方式百度都有,但是还是没有解决我当时遇到的问题, 首先排除navicat的问题,连接选择UTF-8的编码格式, 在Idea中使用debug调试,均可以 ...