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个数一次,整个矩阵可以交换两列一次. ...
随机推荐
- php调用c/c++的一种方式
php调用c/c++有很多方式,最常用的是通过tcp或者http去调用,通过发送请求去调用c/c++编写的cgi/fastcgi来实现,另外php还有一种直接执行外部应用程序的方式,这种方式会影响到系 ...
- HBase集成Zookeeper集群部署
大数据集群为了保证故障转移,一般通过zookeeper来整体协调管理,当节点数大于等于6个时推荐使用,接下来描述一下Hbase集群部署在zookeeper上的过程: 安装Hbase之前首先系统应该做通 ...
- Pooled Allocation(池式分配)实例——Keil 内存管理
引言:说到动态申请(Dynamic Allocation)内存的好处,学过C/C++的人可能都有体会.运行时的灵活申请自然要比编码时的猜测好的多.而在内存受限情况下这种灵活性又有特别的好处--能让我们 ...
- ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述
★PART1:32位保护模式下任务的隔离和特权级保护 这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...
- codeforces 515B. Drazil and His Happy Friends 解题报告
题目链接:http://codeforces.com/problemset/problem/515/B 题目意思:有 n 个 boy 和 m 个 girl,有 b 个 boy 和 g 个 girl ( ...
- 线条围绕 div 中心转圈 效果
1. 用到知识: CSS:animate ,clipe 2.原理: 用clip 属性 将div 切边 ,会出现 切边的动态效果,然后内部的div 遮住外部的div ,流出一部分 作为边: 就是旋 ...
- 快速入门GreenDao框架并实现增删改查案例
大家的项目中不可避免的使用到SQLite,为此我们要花费心思编写一个增删改查框架.而一个好的ORM框架则能够给我们带来极大的方便,今天给大家讲解一个非常火热的ORM-GreenDao. 基本概念 Gr ...
- IOS - Objective-C NSArray和NSMutableArray的详解 使用
原文地址:http://blog.csdn.net/totogo2010/article/details/7729377 Objective-C的数组比C++,Java的数组强大在于,NSArray保 ...
- mongoDB 3.0以前版本 - 入门指南、示例
一.准备工作 1. 下载mongoDB 下载地址:http://www.mongodb.org/downloads 选择合适你的版本 相关文档:http://www.mongodb.org/displ ...
- Ubuntu gcc编译报错:format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘__time_t’ [-Wformat=]
平时用的都是Centos系统,今天偶然在Ubuntu下编译了一次代码,发现报错了: 源码: #include <stdio.h> #include <sys/time.h> # ...