CDOJ 490 UESTC 490 Swap Game(思路,逆序对)
题意:有两种颜色的小球形成环,求最小交互次数使球相连。
题解:先解决另一个简单的问题,如果是一个链,把红球标记为1,蓝球标记为0,要排成升序需要多少次交换呢?答案是逆序对总数,原因是一次交互最多消除一个逆序对,而且有策略可以保证每次消除一个逆序对。要解决这个问题,需要做一些变通。看蓝球,因为是环,为了使交换次数最小,前半段的蓝球应该往前靠,所以在后半段的蓝球应该往后靠。那么就把原序列划分成两半,前面一段记红球为1,蓝球为0,后面一段记蓝球为1,红球为0,然后分别计算逆序对数,就可以求出以0位置前为中心的逆序数。然后在枚举中心的位置,枚举的时候,可以在O(1)时间计算出新的逆序值,具体方法是只考虑端点处的小球对左右区间逆序值的影响。
记左区间长度为b1,把中心移动到b1+i球的后面,那么b1+i位置的球会加入左区间,i号球则加入到右区间,当b1+i号球是R的时候,它对左右两边的逆序值都是没有影响的,(对于右区间,R是0,对于左区间,R是1),当它是B的时候,对于右区间,逆序对总数减少了原来右区间中0的个数,对于左区间,增加了i移动之后1的个数。对于i的移动,类似地讨论一下。
#include<cstdio>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
//#define local const int maxn = 1e5+; int C[]; char str[maxn]; int main()
{
#ifdef local
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
#endif // local
int T;
scanf("%d",&T);getchar();
for(int k = ; k <= T; k++){
printf("Case #%d: ",k);
gets(str);
memset(C,,sizeof(C));
int len = strlen(str);
int invSum = ;
int b1 = len>>,b2 = len - b1;
for(int i = ; i < b1; i++) {
if(str[i] == 'R') { C[]++;}
else { invSum += C[]; }
}
for(int i = b1; i < len; i++) {
if(str[i] == 'B') { C[]++;}
else { invSum += C[]; }
} int best = invSum;
//printf("%d\n",best);
for(int i = ; i < len; i++){
int t = (b1+i)%len;
if(str[t] == 'B') { invSum -= b2-C[]; invSum += C[]- (str[i] == 'R'); }
if(str[i] == 'R' ) { invSum -= b1-C[]; invSum += C[] - (str[t] == 'B'); }
if(str[t] == 'B') C[]--;
else C[]++;
if(str[i] == 'R') C[]--;
else C[]++;
best = min(invSum,best);
}
printf("%d\n",best);
}
return ;
}
CDOJ 490 UESTC 490 Swap Game(思路,逆序对)的更多相关文章
- Ultra-QuickSort POJ - 2299 (逆序对)
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a seque ...
- 洛谷P1774 最接近神的人_NOI导刊2010提高(02)(求逆序对)
To 洛谷.1774 最接近神的人 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的 ...
- 01-时间复杂度、对数器(python)、冒泡、选择、递归实质、归并、小和问题、逆序对、mid
1.时间复杂度 常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作. 时间复杂度为一个算法流程中,常数操作数量的指标.常用O(读作big O)来表示. 具体来说, ...
- bzoj 3744 Gty的妹子序列 区间逆序对数(在线) 分块
题目链接 题意 给定\(n\)个数,\(q\)个询问,每次询问\([l,r]\)区间内的逆序对数. 强制在线. 思路 参考:http://www.cnblogs.com/candy99/p/65795 ...
- 【洛谷3157】[CQOI2011] 动态逆序对(CDQ分治)
点此看题面 大致题意: 给你一个从\(1\)到\(n\)的排列,问你每次删去一个元素后剩余的逆序对个数. 关于\(80\)分的树套树 为了练树套树,我找到了这道题目. 但悲剧的是,我的 线段树套\(T ...
- codeforces 414C C. Mashmokh and Reverse Operation(归并排序求逆序对)
题目链接: C. Mashmokh and Reverse Operation time limit per test 4 seconds memory limit per test 512 mega ...
- Ultra-QuickSort——[归并排序、分治求逆序对]
Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...
- [hdu5225]逆序对统计
题目:给定一个1到n的排列,求字典序小于这个排列的所有排列的逆序对数之和. 思路:既然是求字典序小于这个排列的,不妨将排列根据和它前k位相同来分类,然后枚举第k+1位的数(小于原序列第k+1位的数), ...
- 【CQOI2011】动态逆序对 BZOJ3295
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...
随机推荐
- JavaWeb_tomcat设置默认应用
在tomcat的server.xml文件中设置默认应用. 在tomcat文件目录里面的conf/server.xml文件中,在<Engine>...</Engine>中再增加一 ...
- 7.20实习培训日志-Java基础程序设计结构
Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...
- WCF大文件传输【转】
http://www.cnblogs.com/happygx/archive/2013/10/29/3393973.html WCF大文件传输 WCF传输文件的时候可以设置每次文件的传输大小,如果是小 ...
- SQL SERVER动态列名
在ms sql server实现动态呈现列的方法很多.下面Insus.NET解决也算是另外一种参考. 如: 准备实现功能的数据: ) NOT NULL PRIMARY KEY) INSERT INTO ...
- ue4 修改3dui内容
修改text内容1 修改text内容2 上面的方法是对外公开某个控件,然后再蓝图中直接改控件内容 另一种更好的方法时,在控件上新建public变量,控件绑定到这个变量上,由蓝图直接改变这个public ...
- codevs 3333 高级打字机
3333 高级打字机 题目描述 Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作 ...
- [Xcode 实际操作]六、媒体与动画-(5)使用CoreImage框架给图片添加马赛克效果
目录:[Swift]Xcode实际操作 本文将演示如何使用CoreImage图像处理框架,给图片添加像素化的滤镜效果. 在项目导航区,打开视图控制器的代码文件[ViewController.swift ...
- nodejs 从helloworld到高质量的后台服务server的一点思考
---恢复内容开始--- 新公司用的nodejs作为app和网站的后台服务server,所以最近对nodejs一直在学习,加上之前简单的学习了一点,看了两天后台接口源码,所以就直接上手干活了,下面是我 ...
- java之代理 静态代理和动态代理
一.静态代理 1. 代理有很多种,有虚拟代理,保护代理,智能引用代理,和远程代理; 开发中最常用的是只能引用代理 2. 代理的模式有两种,分别是: 静态代理 代理对象,被代理对象在 ...
- Photoshop CC 2014 for mac破解版
https://pan.baidu.com/s/1gfmTq8b 安装PS试用版后,打开Applications/Photoshop CC 2014文件夹下, 右键Photoshop CC 201 ...