codeforces724-B. Batch Sort
想着想着就忘了有什么问题没解决,坑啊
一开始读错题意了,而且一着急写了两大段差不多的代码,冗余度啊,不说了。。
显然的一点,给的数据是绝对离散的,每行都是1~m的排列
难点一、如何移动能使未排序的数组移动后有序,并且移动步数最小
从前到后,遇到不是位置等于名次的数,就和在他名次的位置的那个数的位置交换
算法可以保证终止,但不能证明其最小
//其实只要小于n+1
发现事实:对于相同的交换操作,如果每一行都有,我们显然可以都顺便做掉
难点二、移动先后的选择,如果你先移动好了一个有序组,后面又加了交换所有行的两列操作
你这个操作很可能就被无效化了,
(所以解决方案之1是先进行交换所有行的两列的操作,然后进行交换单行的两列)
1 3 2 4
1 3 4 2
1 3 4 2
1 3 4 2
当然这个调整的方法是我上面自己想的。。
这个数据,我们先把第一组单列调整有序,不波及其他的行的列
然后后面的三个一起调整,当后面的调整好了之后,我们发现第一组无序了
然后还有剩余步数,它只动自己的次数已经用完,所以每次交换所有行的列
当第一组又变得有序的时候,第一步数超了,第二其他组都不是有序的了 当有某一组单独有序的时候,我们不能保证调整波及有序组之后
这一组变无序之后还能在有限合法步数内变成有序,而且变换后
所有组都是有序的 搞不动了,我发现好像没什么规律,然后想写个暴力冲一发,这是q神的策略之一,看不出规律就暴力冲一发 我发现暴力好像不太好写啊。。 我又发现一个事实,当我对于整体里有一个有序组的情况困惑时
我手算了一下,如果你每次移动都带着一个有序组,当前有无序组,那么由于一一对应的关系,无论你怎么交换
最后肯定有无序的,
所以说碰到有序组,要考虑每组一个单独的列交换要么花在这个有序组变无序又想变有序的过程中
要么花在其他无序组
上面那个操作可以简单解释为,用了单独列交换变成有序组,然后其他组带着有序组交换,有序组最终变无序
其他组又变有序,此时又没有什么单独列交换可做,只做所有行的列交换已经被证明不可以 尽量多的组变成有序,其他剩下的组每个用一次单独列交换
这样会不会比全部单独列交换
或者所有行列交换和单独列交换各占一部分
的步数多呢。。
我刚刚想解决的问题是,对应两组数,选定之后对应的两个列,交换后有什么后果
如果其中一个组的两个列都在自己对应的位置,那么交换后,对应位置只增不减,要么另外一组变有序,这组有序变无序,要么两个都变无序
都不在对应位置,相同的话,交换后可能都在对应位置 选择某一组进行调整,那么如果你选的顺序不同会造成,对于完全相同的组的所有行列交换操作的影响 还是在困惑如何解决这个可行性的问题,判定方法一般在题目里
所以我又想起来,我还是去求最小值,然后判最小值的大小,或者暴力求可行解 两个都错位的序列是有区别的,2,1,4,3和2,3,4,1 虽然说都错位了,但是像这种1,2变成2,1的距离有序序列的距离就短
手算了一下2,3,4,1 我发现无论交换顺序如何(每次交换到自己的本位),交换步数不变。。
按这样的交换的方法,无序组最多交换n-1次就能变成有序的,因为每次交换都至少让一个元素就位(会有两个),而已经就位的元素就不会有元素再指向它目前的位置(它不动了,稳了) 考虑一组样例,若干只交换某一个元素就能变成完全相同的序列(交换距离为1),还有若干完全跟这些序列不同的序列。。
如果没法判别这些序列。。
(不能保证劳动成果的交换,我们是不是都不应该考虑呢)
关键是在都不相同的情况下,如果考虑每个单换成有序的, 1 3 2 4
1 3 4 2 我考虑了最后一步是什么操作,好像不太确定。。
一步能变成有序的话,我们不动它,然后变换成最像那个一步变换成有序的序列,如果都变换得很像的话。。最后用所有行的列交换,把若干相同的序列一步交换变成有序 但是对于
2 1 3 4 5 6
1 2 4 3 5 6
1 2 3 4 6 5
谁都变不成谁。。特判吧。。都是一步成仙的,就直接ok好了。。
对于
1 2 3 4
2 3 4 1
3 4 1 2
4 1 2 3
有这种直接有序的组。。先算一下剩下的组单列能不能一步升仙,然后找不到一步升仙的,也找不到像的。。
(最后考虑多个相同组的全行列交换,交换后不满足条件的看能不能单列一步升仙) 我发现这个跟完全有序的组的数量有关。。
假设前面这种组为n,而后面组数量为m,变成一步相似组,m-1,最后来一步交换+1,还是m,但是前面的n组从有序变成了无序
变回来还要+n,所以一共是n+m
如果我们不集体处理的话,后m组就会变成1+(m-1),不动前面的n组就只能组内移动一次,所以如果可能的话是m,不过这很可能导致NO的结果 我觉得题目中最勉强的情况是。。都一步变换成同一个一步成仙型,然后都一步到位?
codeforces724-B. Batch Sort的更多相关文章
- CF724B. Batch Sort[枚举]
B. Batch Sort time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- CodeForces 742B Batch Sort
B. Batch Sort time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Batch Sort
Batch Sort time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort 暴力
B. Batch Sort 题目连接: http://codeforces.com/contest/724/problem/B Description output standard output Y ...
- 【39.77%】【codeforces 724B】Batch Sort
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort
链接 题意:输入n,m,表示一个n行m列的矩阵,每一行数字都是1-m,顺序可能是乱的,每一行可以交换任意2个数的位置,并且可以交换任意2列的所有数 问是否可以使每一行严格递增 思路:暴力枚举所有可能的 ...
- Codeforces Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort(暴力)
传送门 Description You are given a table consisting of n rows and m columns. Numbers in each row form a ...
- codeforces 724B Batch Sort(暴力-列交换一次每行交换一次)
题目链接:http://codeforces.com/problemset/problem/724/B 题目大意: 给出N*M矩阵,对于该矩阵有两种操作: (保证,每行输入的数是 1-m 之间的数且不 ...
- [CF724B]Batch Sort(暴力,思维)
题目链接:http://codeforces.com/contest/724/problem/B 题意:给出n*m的数字阵,每行数都是1-m的全排列,最多可以交换2个数一次,整个矩阵可以交换两列一次. ...
随机推荐
- response content-type json
2015年11月3日 15:47:43 百度知道:ajax开发中在请求服务器端的响应时, 对于每一种返回类型 规范的做法是要在服务端指定response的contentType 常遇到下面的几种情况: ...
- c++ vector struct 使用
1. //test.h #include <string> using namespace std; struct AA { string a1; string a2; string a3 ...
- perl运行其他程序的5种方法
1.使用system函数 运行成功,返回0,运行失败则返回非负整数 system("cmd"); 2.使用qx my $cmd1=qx/date/; 3.使用`` 与qx等效 4. ...
- 解决VM虚拟机MAC OS X 10.10.x的卡顿问题
点此链接下载beamoff安装到虚拟机即可.
- ABAP 供应商、工厂对应公里数维护
*&---------------------------------------------------------------------* *& Report ZMMR011 ...
- 前端easyui的简化调用
easyui近期一直都比较流行,虽然它在效果上被extjs爆了,它的使用难度低,在IE6下表现不错,的确受到了广泛企业程序员的好评. 但是他的API说明还是比较简陋的,刚上手可能还需要摸索一下,为什么 ...
- inline函数的用法
在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数.栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间 ...
- android快速开发--常用utils类
1.日志工具类L.java package com.zhy.utils; import android.util.Log; /** * Log统一管理类 * * * */ public class L ...
- 【python】入门学习(九)
面向对象编程 class 定义类,类的值可以修改 _ _init_ _(self) 初始化函数,创建类时自动调用 self 指向对象本身,可以用其他的名字 但不建议 #person.py class ...
- 【SSO单点系列】(1):CAS4.0 环境的搭建
一.概述 今天开始写CAS相关的第一篇文章,这篇文章主要是关于CAS环境的搭配,提供给刚刚接触CAS的一个入门指南,并演示一个CAS的最简单的实例 二.环境要求 博主的环境如下: win8.1 64 ...