时间限制 : - 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. 解决IOS下window.open页面打不开问题

    问题如标题所写,在ajax回调里面拿到即将要跳转的链接url,使用window.open(linkUrl),没有起作用,而且代码也没有报错,查找原因是:大部分现代的浏览器(Chome/Firefox/ ...

  2. 数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例)

    数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例) 简介 scikit-learn 估计器 加载数据集 进行fit训练 设置参数 预处理 流水线 结尾 数据挖掘入门系 ...

  3. py2.7 批量转换文件为 utf8 编码

    source insight 不支持 utf8 ,但是在 linux 上查看的时候是 utf8 编码,就会显示不正常,所以写了个 python 小脚本,可以批量转换 py2.7 #coding:utf ...

  4. 前后端分离基于Oauth2的SSO单点登录怎样做?

    一.说明 单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼:本文主要介绍跨域间的 前后端分离 项目怎样实现单点登录,并且与 非前后端分离 的差 ...

  5. mongo复制数据库和表

    1.使用工具Studio 3T for MongoDB 选择一个数据库中的Collections集合,然后按住 Ctrl+C 复制快捷键会弹出如下帮助框. 点击 Ctrl+V 粘贴快捷键,重命名一下复 ...

  6. airtest的使用(作用类似于appium)

    1.安装 下载免安装版本:http://airtest.netease.com/ 文档:http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/in ...

  7. Java安装和配置

    一. Java安装和配置 1.JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21331 ...

  8. Linux 中useradd命令的使用

    Linux 系统中通常都是root用户具有超级权限,超级用户root一般是不需要创建的,然而很多时候root用户不是任何人都可以使用的,毕竟最高权限的用户,任意使用的话,会对系统造成很多不必要的破坏. ...

  9. 关于Resouces.resx 在WPF中{x:Static}不显示内容只显示字段的问题解决办法

    问题现象:<object property="{x:Static prefix:typeName.staticMemberName}" .../> 界面中只显示资源引用 ...

  10. python-参考书

    真的是找了很多的参考书,但是看懂,上手用的就一本比较好的<编程小白的第1本python入门书>非常的好. 属于那种一看就懂,能说明白的.别的,要么就是翻译的外文的,有点难以理解,要么就是中 ...