Fire
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的更多相关文章
- 关于SequeezeNet中的Fire Module
在论文<SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE>中,作者 ...
- FZU 2150 Fire Game
Fire Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- Android 轻量级输入校验库:Fire Eye
Fire Eye是一款轻量级简单易用的Android校验库. FireEye 2.0 在 1.0 的基础上,全部重写了代码,并优化了架构,性能上和逻辑上都大大提升.只需要几行代码,即可验证用户输入,并 ...
- ACM: FZU 2150 Fire Game - DFS+BFS+枝剪 或者 纯BFS+枝剪
FZU 2150 Fire Game Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- UVA 11624 Fire!(广度优先搜索)
题目大意:在一个N*M的迷宫内,J代表某人(只有一个),F代表火(可能不只一个),#代表墙,火每分钟会向四周除了墙以外的地方扩散一层,问人能否在没被火烧到 之前逃出迷宫,若能逃出输出最短时间.很明显的 ...
- Amazon的Fire Phone之于Android开发者
在上周Amazon也耐不住加入了手机竞争行列之中,发布了自己的Fire Phone,于是Android家族又多了一位变种成员,Android系统的碎片化程度也进一步加剧.因为工作的关系,我有幸在上个月 ...
- Fire!(BFS)
Fire! Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Descr ...
- FZU Problem 2150 Fire Game
Problem 2150 Fire Game Accept: 145 Submit: 542 Time Limit: 1000 mSec Memory Limit : 32768 KB P ...
- hdu 1045:Fire Net(DFS经典题)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
随机推荐
- shell编程学习
1.项目中用到Linux的crontrab Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,但是也不是非常复杂,基本上用过一遍就能记住了,关键是要记住/var/spool/cr ...
- 将sqlserve数据绑定到dataGridView中及一些操作
一:将数据绑定到dataGridView控件上. string sqlconn = "server=.;database=student;integrated security=true&q ...
- 'Missing recommended icon file - The bundle does not contain an app icon for iPhone / iPod Touch of exactly '120x120' pixels, in .png format'
创建120像素的高分辨率和60个像素定期如上,苹果文档中提到,并设置名称的新图标.例如,icon-120.png和icon-152.png. 将这个图标到你的项目资源文件夹并添加该图标到项目: 在此之 ...
- Java基础知识系列——目录操作
Java对目录操作的许多方法与上一篇文件操作的方法很多是一样的. java.io.File file = new File( "D:\1\2\3\4"); 1.递归创建目录 fil ...
- Android-MediaRecorder-音频录制-警告-W/MediaRecorder(13811): mediarecorder went away with unhandled events
Android-MediaRecorder-音频录制-警告-W/MediaRecorder(13811): mediarecorder went away with unhandled events ...
- js实现一些跨浏览器的事件方法
用JavaScript实现事件的绑定,移除,以及一些常用的事件属性的获取,时常要考虑到在不同浏览器下的兼容性,下面给出了一个跨浏览器的事件对象: var EventUtil = { on: funct ...
- eclipse部署web项目至本地的tomcat但在webapps中找不到
一.发现问题 在eclipse中新建Dynamic Web Project,配置好本地的tomcat并写好代码后选择Run on Server,但运行后发现在tomcat的安装目录下的webapps并 ...
- python学习之——splinter介绍
Splinter是什么: 是一个用 Python 编写的 Web 应用程序进行验收测试的工具. Splinter执行的时候会自动打开你指定的浏览器,访问指定的URL,然后你所开发的模拟的任何行为,都会 ...
- ORA-20000:ORU-10027:buffer overflow,limit of 2000 bytes.
ORA-20000:ORU-10027:buffer overflow,limit of 2000 bytes. 这是因为在过程中用到了dbms_output.put_line()在服务器端输出信 ...
- C#中的线程(一)入门
文章系参考转载,英文原文网址请参考:http://www.albahari.com/threading/ 作者 Joseph Albahari, 翻译 Swanky Wu 中文翻译作者把原文放在了& ...