牛客网练习赛25 C 再编号
链接:https://www.nowcoder.com/acm/contest/158/C
来源:牛客网
定义对 a 的再编号为 a' ,满足 。
现在有 m 次询问,每次给定 x,t ,表示询问经过 t 次再编号后第 x 个人的编号。
由于答案可能很大,所以对 109+7 取模。
输入描述:
第一行 2 个数 n,m ,表示人数和询问次数;
接下来一行 n 个数,表示 ai;
接下来 m 行,每行 2 个数 x,t ,描述一次询问。
输出描述:
m 行,第 i 行 1 个数表示第 i 次询问的答案对 109+7取模的结果。
输入
4 3
1 2 3 4
1 0
2 2
4 1
输出
1
22
6
说明
初始编号:1 2 3 4
1 次再编号后:9 8 7 6
2 次再编号后:21 22 23 24
备注:
n ≤ 100000 , m ≤ 10000 , t ≤ 100000 , 1 ≤ a ≤ 109
按照题目模拟,应该可以过个$30%$吧。
我们来看一下数据会发现具有一定的规律。
初始编号:1 2 3 4 $sum0:10=1+2+3+4$
一次编号:9 8 7 6 $sum1:30=10 \times 4-1-2-3-4=sum1-sum0=sum0 \times (n-1)$
二次编号:21 22 23 24 $sum2:90=30*4-...=sum1 \times (n-1)$
从而得出规律:$$sumk=sum(k-1) \times (n-1)$$
这样我们则可以在线性时间内求出每次变换序列的和,这显然还不足以得出答案。
现在我们在考虑如何查询x位置上的数?
拿二位数组储存明显会MLE,所以我们再观察一下序列,会发现序列存在一定的关系。
就那每次变化第一个数为例,每一行其他的数减第一个数绝对值相等,在更深入考虑一下,为什么?
每次我们的序列元素是由同一个相同的数减来的,所以相对大的数变小,相对小的数变大,但是他们的差值不变。
初始编号:逐渐递增。与1位置数相减序列为 0 1 2 3
一次编号:逐渐递减。与1位置数相减序列为 0 -1 -2 -3
二次编号:逐渐递增。... 0 1 2 3
所以我们可以发现在偶数次变化后序列大小关系与原序列相同,奇数次相反。
从而我们可以预处理时记录下每一次变化一号位置的数,从而根据大小关系的出x号点的大小。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
#define LL long long
#define mod int(1e9+7)
LL a[],n,m,con[]; // a[]原序列,con[]表示原序列的大小关系
LL ans[][],num; //ans[i][1]表示第i次变幻1号点的大小
int main()
{
LL x,t;
scanf("%lld%lld%lld",&n,&m,&a[]);
num=a[];
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
num+=a[i];
con[i]=a[]-a[i];
}
ans[][]=a[];
for(int i=;i<=;i++)
{
ans[i][]=((num-a[])+*mod)%mod;
a[]=ans[i][]; //更新
num=(num*(n-))%mod;//每次改变前缀和
}
for(int i=;i<=m;i++)
{
scanf("%lld%lld",&x,&t);
//判断变幻的次数的奇偶
if(t%!=)printf("%lld\n",(ans[t][]+con[x]+mod)%mod);
else printf("%lld\n",(ans[t][]-con[x]+mod/*防止出现负数取模*/)%mod); }
}
牛客网练习赛25 C 再编号的更多相关文章
- 牛客网练习赛28A
题目链接:https://www.nowcoder.com/acm/contest/200/A 链接:https://www.nowcoder.com/acm/contest/200/A来源:牛客网 ...
- 牛客网练习赛26B(简单的dp)
题目链接:https://www.nowcoder.com/acm/contest/180/B 链接:https://www.nowcoder.com/acm/contest/180/B来源:牛客网 ...
- 牛客网练习赛23 F 托米的游戏
链接:https://www.nowcoder.com/acm/contest/156/F 来源:牛客网 题目描述 题目背景编不下去了 托米有一棵有根树 T, 树根为1,每轮他会在剩下的子树中等概率一 ...
- 牛客网练习赛18 A 【数论/整数划分得到乘积最大/快速乘】
链接:https://www.nowcoder.com/acm/contest/110/A 来源:牛客网 题目描述 这题要你回答T个询问,给你一个正整数S,若有若干个正整数的和为S,则这若干的数的乘积 ...
- 牛客网练习赛34-D-little w and Exchange(思维题)
链接:https://ac.nowcoder.com/acm/contest/297/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 牛客练习赛25 C 再编号
解题思路 我们先来观察一下题目中给出的公式 $$a'_i=(\sum_{j=1}^na_j)-a_i$$ 通过这个公式推一下经过再编号后的序列的总和,因为我们推出这个和之后可以进行下一次计算. $$\ ...
- 牛客网练习赛t2(线段树)
题解: 好像因为他说了 数据范围全部在ll以内 所以直接暴力就可以过了 比较正常是用线段树来维护 洛谷上有道模板题是支持加,乘,区间和 而这题还多了区间平方和的操作 按照那题的操作 我们维护的时候保证 ...
- 牛客网练习赛7-B-购物
在遥远的东方,有一家糖果专卖店. 这家糖果店将会在每天出售一些糖果,它每天都会生产出m个糖果,第i天的第j个糖果价格为C[i][j]元. 现在的你想要在接下来的n天去糖果店进行选购,你每天可以买多个糖 ...
- 牛客网练习赛43-C(图论)
题目链接:https://ac.nowcoder.com/acm/contest/548/C 题意:有n个知识点,学会每个知识点花T[i],已经学会了其中k个知识点,有m组关系,t1,t2,t3,表示 ...
随机推荐
- XTU1266:Parentheses(贪心+优先队列)
传送门 题意 从左到右有n个连续的组,每一组有Li个括号,要么全是左括号,要么全是右括号,以及该组的每一个左括号翻成右括号, 或者右括号翻成左括号的花费Di.可以对这n个组的括号进行翻转,每一个括号都 ...
- 关于 <meta name="viewport" content="width=device-width, initial-scale=1.0">的解释
对于移动开发来讲,我还不太熟悉.今天在github上荡了一个系统源码,进行分析.发现其中有这样一段话: <meta name="viewport" content=" ...
- JQuery动态添加表格,然后动态删除不成功问题
背景: 自己做了一个测试网页,想动态添加表格,然后删除,按照网上的教程写完,发现点击"删除参数"按钮没用 源码: function addtr() { var trinfo = & ...
- SSM报错:No converter found for return value of type: class java.util.ArrayList at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverter
我使用的是SSM框架,是在编写测试RESTFUL接口的时候出现, @RequestMapping(value = "/selectAll", method = RequestMet ...
- python中时间日期格式化符号的含义
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12 ...
- Selenium | 基础入门 | 截屏并保存于本地
可先参考 Selenium | 基础入门 | 利用Xpath寻找用户框 核心代码: //截屏操作 File srcFile = ((TakesScreenshot)driver).getScree ...
- 网络流24题 一句话题解(updating)
搭配飞行员问题 最简单的一道题 就是一个二分图匹配 太空飞行计划 最大权闭合子图 什么叫"最大权闭合子图"呢? 就是给定一个有向图,在里面选择一个点集,使得点集中的 ...
- SPFA/Dijkstra POJ 3013 Big Christmas Tree
题目传送门 题意:找一棵树使得造价最少,造价为每个点的子节点造价和*边的造价和 分析:最短路跑出1根节点到每个点的最短边权值,然后每个点的权值*最短边距和就是答案,注意INF开足够大,n<=1特 ...
- JDBC全部分析
2.1.搭建实验环境 1.在mysql中创建一个库,并创建user表和插入表的数据. SQL脚本如下: 1 create database jdbcStudy character set utf8 c ...
- jmeter(十八)属性和变量
一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...