社区讨论

求大佬把Python改成c++

学术版参与者 13已保存回复 13

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
13 条
当前快照
1 份
快照标识符
@mi6u80dg
此快照首次捕获于
2025/11/20 10:54
4 个月前
此快照最后确认于
2025/11/20 14:33
4 个月前
查看原帖
PYTHON
uses math;
var
        a,b,c,d,last,last1,i,j,k,k1,ans:longint;
        v:array[0..50000,1..2]of longint;
        r,r1:array[1..50000]of longint;
        f:array[0..50000,1..1000]of longint;
procedure ss(l,r:longint);
var
        i,j,mid:longint;
begin
        i:=l;
        j:=r;
        mid:=v[(i+j) div 2,1];
        while i<j do
        begin
                while v[i,1]<mid do inc(i);
                while v[j,1]>mid do dec(j);
                if i<=j then
                begin
                        v[0]:=v[i];
                        v[i]:=v[j];
                        v[j]:=v[0];
                        inc(i);
                        dec(j);
                end;
        end;
        if j>l then ss(l,j);
        if i<r then ss(i,r);
end;
begin
        assign(input,'enemy.in');reset(input);
        assign(output,'enemy.out');rewrite(output);
        readln(a,b,c);
        if (a=2)or(a=1) then
        begin
                writeln(0);
                halt;
        end;
        for d:=1 to a do
        begin
                read(v[d,1]);
                v[d,2]:=d;
        end;
        ss(1,a);
        for d:=1 to a do
        begin
                if v[d,1]<>last then
                begin
                        inc(last1);
                        last:=v[d,1];
                end;
                r[v[d,2]]:=last1;
        end;
        fillchar(f,sizeof(f),0);
        for i:=1 to a do
        begin
                k:=maxlongint;
                for j:=1 to last1 do
                begin
                        k:=min(k,f[i-1,j]);
                        if r[i]>j then f[i,j]:=k+c;
                        if r[i]<j then f[i,j]:=k+b;
                        if r[i]=j then f[i,j]:=k;
                end;
        end;
        ans:=maxlongint;
        for i:=1 to last1 do ans:=min(ans,f[a,i]);
        for i:=1 to a do r1[i]:=r[a-i+1];
        fillchar(f,sizeof(f),0);
        for i:=1 to a do
        begin
                k:=maxlongint;
                for j:=1 to last1 do
                begin
                        k:=min(k,f[i-1,j]);
                        if r1[i]>j then f[i,j]:=k+c;
                        if r1[i]<j then f[i,j]:=k+b;
                        if r1[i]=j then f[i,j]:=k;
                end;
        end;
        for i:=1 to last1 do ans:=min(ans,f[a,i]);
        writeln(ans);
        close(input);
        close(output);
end.

回复

13 条回复,欢迎继续交流。

正在加载回复...