题目背景

题目描述

数轴上有 n 只青蛙,分别编号为 1 到 n。青蛙 i 的初始位置的坐标为 xi。 它们准备进行如下形式的移动:每轮包括 m 次跳跃,第 i 次跳跃由青蛙 ai(1 < ai < n) 执行。青蛙 ai 会从青蛙 ai − 1 和青蛙 ai + 1 中等概率地选一 只,假设选出的青蛙所在的位置为 p,那么青蛙 ai 会跳到它当前位置关于 p 的 对称点。 青蛙们会连续进行 k 轮这样的移动。请你对每只青蛙,求出它最终坐标的 期望值。

输入输出格式

输入格式:

第一行为一个整数 n。 接下来一行 n 个整数 x1, x2, ..., xn。 接下来一行为两个整数 m, k。 接下来一行为 m 个整数 a1, a2, ..., am。

输出格式:

输出共 n 行,第 i 的数表示青蛙 i 的最终坐标的期望值,四舍五入到整数 后输出。

输入输出样例

输入样例#1:

5
-1 3 5 0 2
3 2
2 3 4
输出样例#1:

-1
-6
-4
0
2

说明

对于 20% 的数据,保证 3 ≤ n ≤ 20, 1 ≤ m ≤ 20, k = 1。 对于 40% 的数据,保证 3 ≤ n ≤ 1000, 1 ≤ m, k ≤ 1000。 对于 70% 的数据,保证 3 ≤ n ≤ 1000, 1 ≤ m ≤ 1000, 1 ≤ k ≤ 1018。 对于 100% 的数据,保证 3 ≤ n ≤ 105 , 1 ≤ m ≤ 105, 1 ≤ k ≤ 1018,|xi| ≤ 109, 1 < ai < n。

考试的时候xjb找了一下循环节,写hash还写挂了才得了60分2333。

题解见代码注释》》》

发现一个神规律之后就是一个O(N)题了

/*
首先推式子可以得到p[i]跳后的坐标
f[p[i]]=(2*f[p[i]-1]-f[p[i]])/2+(2*f[p[i]+1]-f[p[i]])/2
化简之后对原位置差分,可以发现跳一次就是交换一下自己和后面
位置的差分,于是对于每一次跳我们就处理出一个置换,然后
答案就可以从置换的K次幂之后对应的差分上计算了。
*/
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#define ll long long
#define maxn 100005
using namespace std;
ll pos[maxn],k,ans[maxn];
int n,m,a[maxn],to[maxn];
int p[maxn],now,circle[maxn];
bool v[maxn]; inline int add(int x,const int ha){
x++;
if(x>=ha) return x-ha;
else return x;
} inline void work(int x){
int len=0;
while(!v[x]){
circle[++len]=x;
v[x]=1,x=to[x];
} int y=k%len; for(int i=1;i<=len;i++,y=add(y,len)){
to[circle[i]]=circle[y+1];
}
} inline void solve(){
for(int i=1;i<=n;i++) if(!v[i]) work(i);
} int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",pos+i),p[i]=i;
//做一次差分
for(int i=n;i;i--) pos[i]-=pos[i-1]; scanf("%d%lld",&m,&k);
for(int i=1;i<=m;i++){
scanf("%d",&now);
//now这个青蛙跳一次相当于交换一下它和它后面一个位置的差分
swap(p[now],p[now+1]);
}
for(int i=1;i<=n;i++){
//我们已经知道了i位置在一次操作之后的差分是p[i]位置的
//也就是p[i]位置的差分在一次差分之后移到了i位置
//所以我们得到的是一个置换的逆
//于是我们需要把边反向从而求出置换
to[p[i]]=i;
} //找置换
solve(); for(int i=1;i<=n;i++) ans[to[i]]=pos[i];
for(int i=1;i<=n;i++){
ans[i]+=ans[i-1];
printf("%lld\n",ans[i]);
} return 0;
}

  

某考试T2 frog的更多相关文章

  1. 9.13 考试 T2 区间

    删区间 题意: 给出一个长度为

  2. 某考试 T2 Tree

    2 树 2.1 题目描述 给一棵n 个节点的树,节点分别编号为0 到n - 1.你可以通过如下的操作来修改这棵树:首先先删去树上的一条边,此时树会分裂为两个连通块,然后在两个连通块之间加上一条新的边使 ...

  3. 某考试 T2 yja

    2.1 Description 在平面上找 n 个点, 要求这 n 个点离原点的距离分别为 r1, r2, ..., rn. 最大化这 n 个点构成的凸包面积, 凸包上的点的顺序任意. 2.2 Inp ...

  4. 题解 2020.10.24 考试 T2 选数

    题目传送门 题目大意 见题面. 思路 本来以为zcx.pxj变强了,后来发现是SPJ出问题了...考试的时候感觉有点人均啊...结果自己还是只想出来一半. 我们假设 \(f(x)=(\lfloor\f ...

  5. 2019.3.7考试T2 离线数论??

    $ \color{#0066ff}{ 题目描述 }$ 一天,olinr 在 luogu.org 刷题,一点提交,等了一分钟之后,又蛙又替. olinr 发动了他的绝招,说:"为啥啊???&q ...

  6. 某考试 T2 orzcyr

    非常nice的一道行列式的题目. 考虑如果没有路径不相交这个限制的话,那么这个题就是一个行列式:设 a[i][j] 为从编号第i小的源点到编号第j小的汇点的路径条数,那么矩阵a[][]的行列式就是的答 ...

  7. 2019.2.26考试T2 矩阵快速幂加速DP

    \(\color{#0066ff}{题解 }\) 可以发现, 数据范围中的n特别小,容易想到状压 可以想到类似于状压DP的思路,按列进行转移 那么应该有3维,\(f[i][j][k]\)代表到第i列, ...

  8. 2019.2.10考试T2, 多项式求exp+生成函数

    \(\color{#0066ff}{ 题目描述 }\) 为了减小文件大小,这里不写一堆题目背景了. 请写一个程序,输入一个数字N,输出N个点的森林的数量.点有标号. 森林是一种无向图,要求图中不能存在 ...

  9. 某考试 T2 Seg

    Seg [问题描述]数轴上有n条线段,第i条线段的左端点是a[i],右端点是b[i].Bob发现1~2n共2n个整数点,每个点都是某条线段的端点.这些线段有如下两类特点:1 x y,表示第x条线段和第 ...

随机推荐

  1. Android设为系统默认的短信应用

    要设为系统默认的短信应用首先要配置一下AndroidManifest.xml文件,添加下列: <!-- BroadcastReceiver that listens for incoming S ...

  2. DiyCode开源项目 BaseActivity 分析

    1.首先将这个项目的BaseActivity源码拷贝过来. /* * Copyright 2017 GcsSloop * * Licensed under the Apache License, Ve ...

  3. python并发编程相关概念总结

    1.简述计算机操作系统中的“中断”的作用? 中断是指在计算机执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂时中断当前正在执行的程序而转去执行相应的时间处理程序.待处理完毕后又返回 ...

  4. [项目1] bloger - day1

    项目代码:https://github.com/venicid/Project1--Bloger 1.准备工作 1.创建project PS C:\Users\Administrator\Deskto ...

  5. BZOJ 4393: [Usaco2015 Dec]Fruit Feast

    DP #include<cstdio> using namespace std; int T,A,B,F[5000005],G[5000005]; int main(){ scanf(&q ...

  6. Azure Active Directory中的特权身份管理如何运作?

    [TechTarget中国原创] 用户权限不是平等的.有些用户需要有大量权利和特权——通常这些都是管理员.企业在允许特权用户进行管理以及支持活动时,还需要意识到特权用户也有可能犯错.他们会犯错.他们可 ...

  7. 【BZOJ 3620】似乎在梦中见过的样子

    题目 (夢の中で逢った.ような--) 「Madoka,不要相信 QB!」伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回中所发 ...

  8. Python-S9-Day128——算法基础Algorithm

    01 算法基本概念与递归: 02 二分查找与LOW B三人组 03 快速排序 04 归并排序 01 算法基本概念与递归: 1.1 算法概念 1.2 复习:递归 1.3 时间复杂度 1.4 空间复杂度 ...

  9. 一、vue的数据双向绑定的实现

    响应式系统 一.概述 Vue通过设定对象属性的 setter/getter 方法来监听数据的变化,通过getter进行依赖收集,而每个setter方法就是一个观察者,在数据变更的时候通知订阅者更新视图 ...

  10. 关于Android应用中图片占用内存浅谈

    从事过移动端应用开发的童鞋应该都清楚,内存是非常宝贵的资源.如果能很好的利用有限的内存,对应用性能的提升会有很大的帮助.在实际应用开发中图片内存占整个应用非常大的比重,我们只有了解图片是如何加载到内存 ...