传送门

解题思路

首先考虑k=1的情况,对于每一个a[i],它可能会到a[i-1]*2-a[i] 与 a[i+1]*2-a[i]两个位置,概率都为%50,那么它的期望位置为 (a[i-1]*2-a[i]+a[i+2]*2-a[i])/2 即为 a[i+1]+a[i-1]-a[i]

对于以后的位置,可以把这个位置的期望位置视作它的变化,所以也可以直接算。做出差分数组,对于i与i+1,diff[i]=a[i]-a[i-1] ,diff[i+1]=a[i+1]-a[i],如果让i这个位置跳,diff[i]=a[i+1]-a[i] ,diff[i+1]=a[i]-a[i-1], 相当于交换了位置。对于k>1 其实就是找出每个位置的循环节,然后k%(循环节-1)即为最终的位置。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib> using namespace std;
const int MAXN = 100005;
typedef long long LL; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?-1:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
} struct Data{
LL diff;
int id;
}data[MAXN]; int n,m,a[MAXN];
int fa[MAXN],num;
LL now[MAXN<<1],ans[MAXN],sum[MAXN];
bool vis[MAXN];
LL k; int get(int x){
if(vis[x]) return 0;
now[++num]=x;
vis[x]=1;
return get(fa[x])+1;
} int main(){
// freopen("data.txt","r",stdin);
// freopen("wrong.txt","w",stdout);
n=rd();
for(register int i=1;i<=n;i++){
a[i]=rd();
data[i].diff=a[i]-a[i-1],data[i].id=i;
}
m=rd();scanf("%lld",&k);
for(register int i=1;i<=m;i++){
int x=rd();
swap(data[x],data[x+1]);
}
for(register int i=1;i<=n;i++) {
if(data[i].id==i) continue;
fa[i]=data[i].id;
}
for(register int i=1;i<=n;i++){
if(data[i].id==i) {
ans[i]=data[i].diff;
continue;
}
if(vis[i]) continue;
int siz=get(i);
for(register int j=1;j<=siz;j++) now[j+siz]=now[j];
LL to=(k-1ll)%(LL)siz;
for(register int j=1;j<=siz;j++)
ans[now[j]]=data[now[j+to]].diff;
num=0;
}
// for(register int i=1;i<=n;i++) cout<<ans[i]<<" ";cout<<endl;
for(register int i=1;i<=n;i++)
ans[i]+=ans[i-1],printf("%lld.0\n",ans[i]);
return 0;
}

AT2164 Rabbit Exercise的更多相关文章

  1. [AT2164] [agc006_c] Rabbit Exercise

    题目链接 AtCoder:https://agc006.contest.atcoder.jp/tasks/agc006_c 洛谷:https://www.luogu.org/problemnew/sh ...

  2. AT2164 [AGC006C] Rabbit Exercise

    首先我们可以考虑一下 \(x\) 关于 \(y\) 的对称点的坐标,不难发现就是 \(x + 2 \times (y - x)\),那么期望的增量就会增加 \(2 \times (y - x)\).不 ...

  3. 【AtCoder】【思维】【置换】Rabbit Exercise

    题意: 有n只兔子,i号兔子开始的时候在a[i]号位置.每一轮操作都将若干只兔子依次进行操作: 加入操作的是b[i]号兔子,就将b[i]号兔子移动到关于b[i]-1号兔子现在所在的位置对称的地方,或者 ...

  4. [Atcoder Grand 006 C] Rabbit Exercise 解题报告 (期望)

    题目链接:https://www.luogu.org/problemnew/show/AT2164 https://agc006.contest.atcoder.jp/tasks/agc006_c 题 ...

  5. AT2164-[AGC006C]Rabbit Exercise【差分,倍增,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2164 题目大意 \(n\)只兔子编号为\(1\sim n\),第\(i\)只在坐标轴\(x_i\)处.然后\( ...

  6. 【AGC006C】Rabbit Exercise 置换

    题目描述 有\(n\)只兔子站在数轴上.为了方便,将这些兔子标号为\(1\ldots n\).第\(i\)只兔子的初始位置为\(a_i\). 现在这些兔子会按照下面的规则做若干套体操.每一套体操由\( ...

  7. 题解-AtCoder-agc006C Rabbit Exercise

    Problem AtCoder & bzoj 题意:数轴上有\(n\)个点(初始坐标均为整数),编号为\(1\)~\(n\).给出\(m\)个操作. 每个操作会选定点\(a\),然后随机在点\ ...

  8. AtCoder Grand Contest 006 (AGC006) C - Rabbit Exercise 概率期望

    原文链接https://www.cnblogs.com/zhouzhendong/p/AGC006C.html 题目传送门 - AGC006C 题意 有 $n$ 个兔子,从 $1$ 到 $n$ 编号, ...

  9. 【做题】agc006C - Rabbit Exercise——模型转换

    原文链接https://www.cnblogs.com/cly-none/p/9745177.html 题意:数轴上有\(n\)个点,从\(1\)到\(n\)编号.有\(m\)个操作,每次操作给出一个 ...

随机推荐

  1. keepalived的常见的健康检查方式

    TCP_CHECK tcp端口检测 HTTP_GET http接口检测 MISC_CHECK 自定义脚本检测 tcp端口检测 TCP_CHECK { connect_port 80 connect_t ...

  2. adb 使用记录

    127.0.0.1:21503 adb kill -server adb start -server adb devices adb logcat | fing "cocos" a ...

  3. CodeForces 258D Little Elephant and Broken Sorting(期望)

    CF258D Little Elephant and Broken Sorting 题意 题意翻译 有一个\(1\sim n\)的排列,会进行\(m\)次操作,操作为交换\(a,b\).每次操作都有\ ...

  4. node vue 微信公众号(四)配置环境 本地测试

    1.去natap 配置端口号 //本地项目是8080端口,natapp就配置8080端口 2.ngrok配合vue-cli实现外网访问 1.去 https://ngrok.com/download 下 ...

  5. 2016.8.19上午初中部NOIP普及组比赛总结

    2016.8.19上午初中部NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1338 这次总结发得有点晚啊!我在这里解释一下, 因为浏览器的问 ...

  6. 面向对象_访问修饰符_构造与析构函数_this指针

    1:面向对象 以codeblocks举例,在一个工程里面: File-->new -->Class可以建一个类,可以设置类的参数,是否有set get方法,有无构造函数等设置,.h文件主要 ...

  7. 模板——Treap

    不得不说平衡树博大精深,除了Treap,还有splay,非旋Treap和可持久化数据结构,今天先讲讲Treap,也很感谢这位大佬的博客给予我帮助:http://www.360doc.com/conte ...

  8. hibernate查询timestamp条件

    参考https://blog.csdn.net/zuozuoshenghen/article/details/50540661 Mysql中Timestamp字段的格式为yyyy-MM-dd HH-m ...

  9. 使用Java代码获取Java进程ID的方法

    需要jre/lib下的tools.jar包 public class Test { public static void main(String[] args) throws Exception {  ...

  10. 《DSP using MATLAB》Problem 8.30

    10月1日,新中国70周岁生日,上午观看了盛大的庆祝仪式,整齐的方阵,先进的武器,尊敬的先辈英雄,欢乐的人们,愿我们的 国家越来越好,人民生活越来越好. 接着做题. 代码: %% ---------- ...