Fire

分析:

首先,明确题意:b1,b2,……,bn 交换为b2,……,bn,b1,但这并不是意味着只能从b1开始交换,(这点从样例中可以看出),并且也不意味着交换的必须是连续的一串,可以是几个单点,如: 原序列:1 2 3 4 5,交换(1 3 5)后

新序列:3 2 5 4 1

交换时必须按照环的方式顺时针或逆时针转动,这并没有限制,只需要一个位置移动到另一个位置时将他顶替掉,他去找他自己应该到的位置就好了,最终是按一个环的移动方式移动,但不一定是从左到右或从右到左,方向交叉。

所以:

我们首先得到目标序列1  2  5  4  3

然后与原序列比较    1  2  3  4  5

做差:              0  0  2  0  -2

1,2,4的差值一样,另外,因为原序列的有序性,无论如何转动目标序列或原序列,1,2,4的差值也一定相同,所以,差值相同的数目一定不变。那么差值相同意味着什么呢,由例子可以看出,差值为零,则该序列与原序列状态相同,所以,我们把差值相同个数最多的移动为零,则剩下的进行交换,所花费的代价一定最小(整体移动一个序列不花费代价,因为整体移动时符合题意,并且没有交换) 。

做法:

按照题意得到目标序列,若得不到原序列则输出 -1;

得到目标序列以后与原序列比较,做差,找到差值相同数目最多的个数S,然后用总数减去S,即为所要花费的最小代价。另外,有与序列方向不确定,所以我们要将原序列倒过来,再按照此做法做一遍。两次取最小值便是答案。

代码实现:

program exam;

var

i,j,kl,kr,m,n,sum,max,min,ans:longint;

a:array[1..50000] of longint;

b:array[0..50000] of longint;

t:array[0..50000] of longint;

l,r:array[1..50000] of longint;

begin

assign(input,'1.txt');

reset(input);

readln(n);

for i:=1 to n do

readln(l[i],r[i]);

a[1]:=1;

a[2]:=r[1];

sum:=2;

for i:=1 to n do

begin

kl:=l[a[sum]];

kr:=r[a[sum]];

if a[sum-1]=kl then

begin

inc(sum);

a[sum]:=kr;

end;

if a[sum-1]=kr then

begin

inc(sum);

a[sum]:=kl;

end;

if (a[sum]<>kl) and (a[sum]<>kr) then

begin

writeln('-1');

halt;

end;

if sum=n then

break;

end;

for i:=1 to n do

begin

b[i]:=a[i]-i;

if b[i]<0 then

b[i]:=b[i]+n;

end;

max:=0;

for i:=1 to n do

begin

inc(t[b[i]]);

if t[b[i]]>max then

max:=t[b[i]];

end;

ans:=n-max;

fillchar(b,sizeof(b),0);

fillchar(t,sizeof(t),0);

max:=0;

for i:=1 to n do

begin

b[i]:=a[i]-(n-i+1);

if b[i]<0 then

b[i]:=b[i]+n;

end;

for i:=1 to n do

begin

inc(t[b[i]]);

if t[b[i]]>max then

max:=t[b[i]];

end;

min:=n-max;

if min<ans then

ans:=min;

writeln(ans);

close(input);

end.

span><�6 0]X�NMsoNormal>begin

ans:=maxlongint;

readln(n);

for i:=1 to n do

readln(a[i]);

tmp:=a;

qsort(1,n);

c:=a;

a:=tmp;

dp;

writeln(ans);

end.

Fire的更多相关文章

  1. 关于SequeezeNet中的Fire Module

    在论文<SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE>中,作者 ...

  2. FZU 2150 Fire Game

    Fire Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  3. Android 轻量级输入校验库:Fire Eye

    Fire Eye是一款轻量级简单易用的Android校验库. FireEye 2.0 在 1.0 的基础上,全部重写了代码,并优化了架构,性能上和逻辑上都大大提升.只需要几行代码,即可验证用户输入,并 ...

  4. ACM: FZU 2150 Fire Game - DFS+BFS+枝剪 或者 纯BFS+枝剪

    FZU 2150 Fire Game Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  5. UVA 11624 Fire!(广度优先搜索)

    题目大意:在一个N*M的迷宫内,J代表某人(只有一个),F代表火(可能不只一个),#代表墙,火每分钟会向四周除了墙以外的地方扩散一层,问人能否在没被火烧到 之前逃出迷宫,若能逃出输出最短时间.很明显的 ...

  6. Amazon的Fire Phone之于Android开发者

    在上周Amazon也耐不住加入了手机竞争行列之中,发布了自己的Fire Phone,于是Android家族又多了一位变种成员,Android系统的碎片化程度也进一步加剧.因为工作的关系,我有幸在上个月 ...

  7. Fire!(BFS)

    Fire! Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Descr ...

  8. FZU Problem 2150 Fire Game

    Problem 2150 Fire Game Accept: 145    Submit: 542 Time Limit: 1000 mSec    Memory Limit : 32768 KB P ...

  9. hdu 1045:Fire Net(DFS经典题)

    Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

随机推荐

  1. .Net开源Excel、Word操作组件-NPOI、EPPlus、DocX[转]

    link: http://www.cnblogs.com/jacktang/p/4493760.html 一.NPOI 简介:NPOI is the .NET version of POI Java ...

  2. DWT小波变换及其在时间序列数据预测中的应用

    Given data: 时间序列数据. Goal:做预测 方法:在滑动窗口中取DWT特征,并验证. 实验验证: Load forcast 数据集. 问题: 小波变换的物理意义是什么? 小波变换的数学意 ...

  3. 有关于java反编译工具的使用

    有时候想去查看jar包中的class文件中的代码,但是class文件如果没有进行反编译操作的话,代码无法直观的查看.这时候可以使用jadeclipse对class文件进行反编译的操作. 1.首先这里需 ...

  4. 使用Goertzel算法识别DTMF信号

    Goertzel算法 Goertzel算法由Gerald Goertzel在1958年提出,用于数字信号处理,是属于离散傅里叶变换的范畴,目的是从给定的采样中求出某一特定频率信号的能量,用于有效性的评 ...

  5. 忘记BIOS超级管理员密码,怎么破解?

    [请尊重原创版权,如需引用,请注明来源及地址] 本人就喜欢没事瞎折腾,动动手活动活动筋骨没坏处,前不久非常便宜的弄到一玩具 ThinkPad T400(公司处理品),外观还算不错,除了电源适配器是坏的 ...

  6. jquery 时间控件怎么能禁止输入只能选择日期?

    jsp一个input输入框用的是easyui时间控件,现在问题是如何是这个input只能点击选择日期,而禁止手动输入 解决方法::: 在日期的input标签里面添加::::editable=" ...

  7. 微信小程序 wx.getUserInfo 解密 C# 代码

    花了6小时,弄出来的代码.网上的是PHP代码 public static string DecodeUserInfo(string raw, string signature,string encry ...

  8. PCIE学习

    PCIe在传输中用8b/10b编码,所以单PCEe2.0的有效带度是4Gb/s x2模式将用于内部接口而非插槽模式 PCIe卡能使用在至少与之传输通道相当的插槽上(例如x1接口的卡也能工作在x4或x1 ...

  9. leveldb 学习笔记之log结构与存取流程

    log文件的格式 log文件每一条记录由四个部分组成: CheckSum,即CRC验证码,占4个字节 记录长度,即数据部分的长度,2个字节 类型,这条记录的类型,后续讲解,1个字节 数据,就是这条记录 ...

  10. (原创)通用查询实现方案(可用于DDD)[附源码] -- 设计思路

    [声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3988592.html).   [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...