CF&&CC百套计划3 Codeforces Round #204 (Div. 1) B. Jeff and Furik
http://codeforces.com/contest/351/problem/B
题意:
给出一个n的排列
第一个人任选两个相邻数交换位置
第二个人有一半的概率交换相邻的第一个数>第二个数的位置;有一半的概率交换相邻第一个数<第二个数的位置
然后两人轮换
问使序列升序,期望最少操作次数
序列升序即逆序对数为0
dp[i]表示 当前逆序对还剩i对时,先手期望最少操作次数
先手在最优解的情况下一定交换 第一个数>第二个数的位置,即减少1个逆序对
后手等概率增加或减少1个逆序对
dp[i]=1+1+dp[i-1-1]*0.5+dp[i-1+1]*0.5
即dp[i]=4+dp[i-2]
所以,若逆序对数为m
ans=m*2-(m&1)
#include<cstdio> using namespace std; #define N 3001 int a[N]; int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;++i) scanf("%d",&a[i]);
int m=;
for(int i=;i<=n;++i)
for(int j=;j<i;++j)
if(a[j]>a[i]) m++;
printf("%d.000000",m*-(m&));
}
1 second
256 megabytes
standard input
standard output
Jeff has become friends with Furik. Now these two are going to play one quite amusing game.
At the beginning of the game Jeff takes a piece of paper and writes down a permutation consisting of n numbers: p1, p2, ..., pn. Then the guys take turns to make moves, Jeff moves first. During his move, Jeff chooses two adjacent permutation elements and then the boy swaps them. During his move, Furic tosses a coin and if the coin shows "heads" he chooses a random pair of adjacent elements with indexes i and i + 1, for which an inequality pi > pi + 1 holds, and swaps them. But if the coin shows "tails", Furik chooses a random pair of adjacent elements with indexes i and i + 1, for which the inequality pi < pi + 1 holds, and swaps them. If the coin shows "heads" or "tails" and Furik has multiple ways of adjacent pairs to take, then he uniformly takes one of the pairs. If Furik doesn't have any pair to take, he tosses a coin one more time. The game ends when the permutation is sorted in the increasing order.
Jeff wants the game to finish as quickly as possible (that is, he wants both players to make as few moves as possible). Help Jeff find the minimum mathematical expectation of the number of moves in the game if he moves optimally well.
You can consider that the coin shows the heads (or tails) with the probability of 50 percent.
The first line contains integer n (1 ≤ n ≤ 3000). The next line contains n distinct integers p1, p2, ..., pn (1 ≤ pi ≤ n) — the permutation p. The numbers are separated by spaces.
In a single line print a single real value — the answer to the problem. The answer will be considered correct if the absolute or relative error doesn't exceed 10 - 6.
2
1 2
0.000000
5
3 5 2 4 1
13.000000
In the first test the sequence is already sorted, so the answer is 0.
CF&&CC百套计划3 Codeforces Round #204 (Div. 1) B. Jeff and Furik的更多相关文章
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) A. Jeff and Rounding
http://codeforces.com/problemset/problem/351/A 题意: 2*n个数,选n个数上取整,n个数下取整 最小化 abs(取整之后数的和-原来数的和) 先使所有的 ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) D. Jeff and Removing Periods
http://codeforces.com/problemset/problem/351/D 题意: n个数的一个序列,m个操作 给出操作区间[l,r], 首先可以删除下标为等差数列且数值相等的一些数 ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) E. Jeff and Permutation
http://codeforces.com/contest/351/problem/E 题意: 给出一些数,可以改变任意数的正负,使序列的逆序对数量最少 因为可以任意加负号,所以可以先把所有数看作正数 ...
- CF&&CC百套计划4 Codeforces Round #276 (Div. 1) A. Bits
http://codeforces.com/contest/484/problem/A 题意: 询问[a,b]中二进制位1最多且最小的数 贪心,假设开始每一位都是1 从高位i开始枚举, 如果当前数&g ...
- CF&&CC百套计划4 Codeforces Round #276 (Div. 1) E. Sign on Fence
http://codeforces.com/contest/484/problem/E 题意: 给出n个数,查询最大的在区间[l,r]内,长为w的子区间的最小值 第i棵线段树表示>=i的数 维护 ...
- CF&&CC百套计划1 Codeforces Round #449 C. Willem, Chtholly and Seniorious (Old Driver Tree)
http://codeforces.com/problemset/problem/896/C 题意: 对于一个随机序列,执行以下操作: 区间赋值 区间加 区间求第k小 区间求k次幂的和 对于随机序列, ...
- CF&&CC百套计划1 Codeforces Round #449 B. Ithea Plays With Chtholly
http://codeforces.com/contest/896/problem/B 题意: 交互题 n张卡片填m个1到c之间的数,1<=n*ceil(c/2)<=m 最后填出一个单调非 ...
- CF&&CC百套计划1 Codeforces Round #449 A. Nephren gives a riddle
http://codeforces.com/contest/896/problem/A 第i个字符串嵌套第i-1个字符串 求第n个字符串的第k个字母 dfs #include<map> # ...
- Codeforces Round #204 (Div. 2)->D. Jeff and Furik
D. Jeff and Furik time limit per test 1 second memory limit per test 256 megabytes input standard in ...
随机推荐
- ubuntu16.04+pycharm+默认文件头注释
安装 1.sudo gedit /etc/hosts 2.最后一行添加 0.0.0.0 account.jetbrains.com 3.从 http://idea.lanyus.com/ 中获取激活码 ...
- mvc的过滤器学习-资料查询
标题:Filtering in ASP.NET MVC 地址:https://docs.microsoft.com/en-us/previous-versions/aspnet/gg416513(v= ...
- Alpha 冲刺报告(4/10)
Alpha 冲刺报告(4/10) 队名:洛基小队 峻雄(组长) 已完成:继续行动脚本的编写 明日计划:尽量完成角色的移动 剩余任务:物品背包交互代码 困难:具体编码进展比较缓慢 ----------- ...
- java8之重新认识HashMap(转自美团技术团队)
java8之重新认识HashMap 摘要 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.随着JDK(JavaDevelopmet Kit)版本的更新,JDK1.8对Ha ...
- iOS- CALayer绘图,如何绘制渐变效果图
1.渐变效果 —> 色彩空间 首先:自定义一个渐变视图,在自定义视图中重写drawRect #import "ViewController.h" #import " ...
- mac下使用marsedit写博客
在Windows习惯了使用Windows live write写好博客,然后发布上去,到了mac下,发现了一个很好的替代品 MarseEdit 下载安装后,打开出现如下解码,选择 I already ...
- Internet History, Technology and Security (Week 5-2)
Week 5 (续) Layer 2: Internet Protocol The InterNetwork (IP) 老师强调了一下不用去记住他介绍的人所说的每句话,而是记住要点,了解老师所做的PP ...
- Delphi 获取Ip地址的方法总结
通过注册表获取或修改Ip 想到Windows会把系统网卡相关信息存入注册表,肯定可通过注册表读取具体ip信息.大致思路是找HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\W ...
- java杂项
简单介绍==和equals区别==是判断两个变量或实例是不是指向同一个内存空间equals是判断两个变量或实例所指向的内存空间的值是不是相同 final, finally, finalize的区别fi ...
- java 调用 oracle的function 和 procedure
1.调用函数 CallableStatement cs=con.prepareCall("{?=call get_pname(?,?,?)}"); 第一个?表示返回的值,后面的?可 ...