时间限制 : - MS   空间限制 : - KB 
评测说明 : 1s,256m
问题描述

奶牛贝西认为,要改变世界,就必须吸收大地的力量,贝西把大地的力量称为魂力。要吸取大地的魂力就需要在地上开出洞穴来。
大地可以看成一个数轴,农夫约翰将不断地在大地上的选一个整数点来开一个洞穴,这个洞穴能分别从他左右两边第一个已经开出的洞穴吸取大地之魂力,吸取到的魂力数量等于对应洞穴的坐标。如果某一个方向没有洞穴,那么这个洞穴就无法从这个方向吸收大地之魂力。约翰可以在一个坐标点上开多个洞穴,每次吸收的大地之魂的数量都会累加。
现在按时间先后给出约翰的开洞的操作序列,约翰想知道他一共能吸收多少大地之魂。结果可能很大,你只需要告诉他模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 大地魂力的更多相关文章

  1. 和我一起打造个简单搜索之Logstash实时同步建立索引

    用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 J ...

  2. ie6下固定位置的实现

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 【开源】使用Angular9和TypeScript开发RPG游戏

    RPG系统构造 通过对于斗罗大陆小说的游戏化过程,熟悉Angular的结构以及使用TypeScript的面向对象开发方法. 项目地址 人物 和其他RPG游戏类似,游戏里面的人物角色大致有这样的一些属性 ...

  4. 【开源】使用Angular9和TypeScript开发RPG游戏(补充了Buffer技能)

    RPG系统构造 通过对于斗罗大陆小说的游戏化过程,熟悉Angular的结构以及使用TypeScript的面向对象开发方法. Github项目源代码地址 RPG系统构造 ver0.02 2020/03/ ...

  5. HBase 监控 | HBase Metrics 初探(一)

    前言:对于任意一个系统而言,做好监控都是非常重要的,HBase也不例外.经常,我们会从JMX中获取相关指标来做展示.对HBase进行监控,那这些指标是怎么生成的呢?如果你想自定义自己的监控指标又该怎么 ...

  6. 【开源】使用Angular9和TypeScript开发RPG游戏(20200410版)

    源代码地址 通过对于斗罗大陆小说的游戏化过程,熟悉Angular的结构以及使用TypeScript的面向对象开发方法. Github项目源代码地址 RPG系统构造 ver0.03 2020/04/10 ...

  7. [开源]eCharts配置简化包OptionCreator[typescript版]

    eCharts存在问题 配置eCharts的option,对于大部分的开发者来说,复杂情况下是一件繁琐的事情.为什么繁琐,大致有以下这些原因 大小写敏感:在没有IDE的智能提示下,很容易写错,而且即使 ...

  8. php大力力 [051节] 支付宝支付.申请支付资质,等待审核中

    https://beecloud.cn/doc/payapply/?index=6 支付宝支付申请支付资质 一.注册支付宝用户 在支付宝官网注册成为用户 二.签约对应支付产品 应用集成支付宝支付,需要 ...

  9. 力软信息化系统快速开发框架 web端+winform端

    力软信息化系统快速开发框架是一套集权限管理+快速开发+动态接口+通用组件+动态UI于一体的全新.net信息化快速开发框架.力软信息化系统快速开发框架的使用,大大地缩短了开发周期,提高了软件质量,同时也 ...

随机推荐

  1. JS中面向对象中的继承(常用写法)---核心部分

    1.基本概念 子类继承父类,但是不能影响父类.包括1.混合继承(构造函数+原型) 2.ES6新增class的继承. 接下来介绍,面向对象中继承的两种常用写法.即混合继承(构造函数+原型)和class继 ...

  2. 2020 webstorm 最新激活方式 有效期2021年11月 可用

    MIIElT25XE-eyJsaWNlbnNlSWQiOiJPUVQzT0oyNVhFIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5r+A5rS7IGlkZWEubWVkZW1pb ...

  3. office一直提示配置进度与图标问题

    原来安装了wps office,广告太烦,于是卸载了wps安装Microsoft office 2010,安装完成后每次打开excel文件都要重新安装配置,修改注册表norereg和设置兼容模式都不行 ...

  4. vue-cli2.0项目 添加骨架屏

    1.创建项目 npm init webpack project 3.下载   vue-skeleton-webpack-plugin 插件 npm install vue-skeleton-webpa ...

  5. vue基础----key的作用

    1.key 在虚拟dom中 标记不同的结构,for循环中需要添加上 <body> <div id="app"> <div v-if="fla ...

  6. 一个和与后台数据连接的模板get post put 以及延伸的query

    /* example: require.config({ paths: { "httpClient": "../../core/http-client" } } ...

  7. scrapy-redis使用以及剖析(转)

    scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dupefilter - URL去重 ...

  8. Oracle数据库使用sysdba登陆时出现ORA-01031: insufficient privileges问题

    今天在自己本本上装上了oracle数据库,然而在命令框登录时 用 sqlplus / as sysdba   时却出现了: insufficient privileges问题 原因就是没有加入ora_ ...

  9. BJDCTF

    python3的模板注入 非常简单...就是直接执行命令就行..虽然过滤了flag,但是拼接下就好了.... payload: http://fd5883ee-b8e2-4bf1-88af-33936 ...

  10. JavaScript隐式类型转换(详解 +,-,*,/,==)

    JavaScript 在 运算 或 比较 之前, 会自动进行隐式类型转换. 下面我们来仔细讲一讲 + - * / == 运算符经历了哪些过程. 类型转换 ECMAScript 运行时系统会在需要时从事 ...