【NOIP2015模拟11.4】最优交换
Description
Input
Output
Sample Input
2
1432 2
4321 2
Sample Output
4312
4321
Data Constraint
反思&题解
考试&正解思路: 又是一道签到难度的题,很显然是贪心,因为一个数要大就要使其高位尽量大,于是从高位到低位枚举将后面最大的数且次数够的数换过来就行了(但是因为我太久没打pascal,又对c++的字符串处理不太熟悉,导致我copy函数乱用,结果直接炸剩5分 我%@¥%……@#@%……)
反思: 不太清楚的操作还是手打比较保险,不然……
CODE
var
t,k,i,j,mx,mxnum,v,tt:longint;
a:array[0..105]of longint;
s,s1:string;
begin
assign(input,'swap.in');
reset(input);
assign(output,'swap.out');
rewrite(output);
readln(t);
for v:=1 to t do
begin
readln(s);
s1:=copy(s,1,pos(' ',s)-1);
a[0]:=length(s1);
for i:=1 to a[0] do
a[i]:=ord(s1[i])-48;
delete(s,1,pos(' ',s));
val(s,k);
for i:=1 to a[0] do
begin
if k=0 then break;
mx:=0;
for j:=i+1 to a[0] do
begin
if (a[j]>mx)and(k-(j-i)>=0) then
begin
mx:=a[j];
mxnum:=j;
end;
end;
if (mx>a[i]) then
begin
k:=k-(mxnum-i);
tt:=a[mxnum];
for j:=mxnum-1 downto i do
a[j+1]:=a[j];
a[i]:=tt;
end;
end;
for i:=1 to a[0] do
write(a[i]);
writeln;
end;
end.