纪中暑假集训 2020.08.06【NOIP提高组】模拟 T2:【NOIP2015模拟11.4】最优交换

【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.

猜你喜欢

转载自blog.csdn.net/CMC_YXY/article/details/107842866