Hướng dẫn giải của Journey with Pigs


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này

Code mẫu của flashmt

const fi='';
      fo='';
      maxn=1000;
type ar=array[1..maxn] of int64;
var n:longint;
    t:int64;
    w,d,a,re,w1,a1:ar;

procedure rf;
var i:longint; p:int64;
begin
     assign(input,fi);
     reset(input);
     readln(n,t);
     for i:=1 to n do read(w[i]); readln;
     for i:=1 to n do read(d[i]); readln;
     for i:=1 to n do
     begin
          read(p);
          a[i]:=p-d[i]*t;
          w1[i]:=i; a1[i]:=i;
     end;
     close(input);
end;

procedure sort(var a,a1:ar;l,r:longint);
var i,j:longint; x,y:int64;
begin
     i:=l; j:=r; x:=a[(i+j) div 2];
     repeat
           while a[i]<x do i:=i+1;
           while a[j]>x do j:=j-1;
           if i<=j then
           begin
                y:=a[i]; a[i]:=a[j]; a[j]:=y;
                y:=a1[i]; a1[i]:=a1[j]; a1[j]:=y;
                i:=i+1; j:=j-1;
           end;
     until i>j;
     if i<r then sort(a,a1,i,r);
     if l<j then sort(a,a1,l,j);
end;

procedure pr;
var i:longint;
begin
     sort(w,w1,1,n);
     sort(a,a1,1,n);
     for i:=1 to n do a[a1[i]]:=i;
     for i:=1 to n do
         re[i]:=w1[a[i]];
end;

procedure wf;
var i:longint;
begin
     assign(output,fo);
     rewrite(output);
     for i:=1 to n do write(re[i],' ');
     close(output);
end;

begin
     rf;
     pr;
     wf;
end.

Code mẫu của RR

{$R+,Q+}
{$Mode objFPC}
uses math;
const
  FINP='';
  FOUT='';
  MAXN=1001;
var
  f1,f2:text;
  n:longint;
  t:int64;
  kq,ind1,ind2,w,d:array[1..MAXN] of longint;
  p:array[1..MAXN] of int64;
procedure openF;
begin
  assign(f1,FINP); reset(f1);
  assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
  close(f1);
  close(f2);
end;
procedure inp;
begin
  read(f1,n,t);
  for n:=1 to n do read(f1,w[n]);
  for n:=1 to n do read(f1,d[n]);
  for n:=1 to n do read(f1,p[n]);
  for n:=1 to n do p[n]-=d[n]*t;
  for n:=1 to n do ind1[n]:=n;
  for n:=1 to n do ind2[n]:=n;
end;
procedure swap(var a,b:longint); inline;
var temp:longint;
begin temp:=a; a:=b; b:=temp; end;

procedure swapi(var a,b:int64); inline;
var temp:int64;
begin temp:=a; a:=b; b:=temp; end;

procedure solve;
var
  i,j:longint;
begin
  for i:=1 to n-1 do
  for j:=i+1 to n do
    if w[i]>w[j] then
      begin
        swap(w[i],w[j]);
        swap(ind1[i],ind1[j]);
      end;
  for i:=1 to n-1 do
  for j:=i+1 to n do
    if p[i]>p[j] then
      begin
        swapi(p[i],p[j]);
        swap(ind2[i],ind2[j]);
      end;
  for i:=1 to n do
    kq[ind2[i]]:=ind1[i];
end;
procedure ans;
begin
  for n:=1 to n do
    write(f2,kq[n],' ');
end;
begin
  openF;
  inp;
  solve;
  ans;
  closeF;
end.

Code mẫu của hieult

#include <stdio.h>
//#include <conio.h>
void quickSort(long long A[],long long a[], long long lower,long long upper)
{
        long long x = A[(lower + upper) / 2];
        long long i = lower;
        long long j = upper;
        do{
                while(A[i] < x)
                        i ++;
                while (A[j] > x)
                        j --;
                if (i <= j)
                {
                     long long tg=A[i];
                     A[i]=A[j];
                     A[j]=tg;
                     tg=a[i];
                     a[i]=a[j];
                     a[j]=tg;   
                        i ++;
                        j --;
                }
        }while(i <= j);
        if (j > lower)
                quickSort(A,a, lower, j);
        if (i < upper)
                quickSort(A,a, i, upper);
}
main()
{
long long n,t,w[1001],d[1001],p[1001],a[1001],b[1001],c[1001],e[1001];
scanf("%lld %lld",&n,&t);
for(long long i=1;i<=n;i++)
  scanf("%lld",&w[i]);
for(long i=1;i<=n;i++)
  scanf("%lld",&d[i]);
for(long i=1;i<=n;i++)
  {
  scanf("%lld",&p[i]);
  c[i]=p[i]-d[i]*t;
  a[i]=i;b[i]=i;
  }
quickSort(w,a,1,n);
quickSort(c,b,1,n);
for(long i=1;i<=n;i++)
  e[b[i]]=i;
for(long i=1;i<=n;i++)
  printf("%lld ",a[e[i]]);
//getch();
}

Code mẫu của ll931110

{$H+}
{$MODE DELPHI}
Program MJOURNEY;
Const
  input  = '';
  output = '';
  maxn = 1000;
Type
  rec = record
    val,pos: int64;
  end;
Var
  w,e,k: array[1..maxn] of rec;
  d,c,res: array[1..maxn] of integer;
  n: integer;
  t: int64;

Procedure init;
Var
  f: text;
  i: integer;
Begin
  Assign(f, input);
    Reset(f);

  Readln(f, n, t);
  For i:= 1 to n do
    Begin
      Read(f, w[i].val);
      w[i].pos:= i;
    End;

  For i:= 1 to n do read(f, d[i]);
  For i:= 1 to n do read(f, c[i]);

  Close(f);

  For i:= 1 to n do
    Begin
      e[i].val:= c[i] - d[i] * t;
      e[i].pos:= i;
    End;
End;

Procedure swap(var x,y: rec);
Var
  z: rec;
Begin
  z:= x;
  x:= y;
  y:= z;
End;

Procedure BubbleSort;
Var
  i,j: integer;
Begin
  For i:= 1 to n - 1 do
    For j:= i + 1 to n do
      if k[i].val > k[j].val then swap(k[i],k[j]);
End;

Procedure solve;
Var
  i: integer;
Begin
  k:= w;
  BubbleSort;
  w:= k;

  k:= e;
  BubbleSort;
  e:= k;

  For i:= 1 to n do res[e[i].pos]:= w[i].pos;
End;

Procedure printresult;
Var
  f: text;
  i: integer;
Begin
  Assign(f, output);
    Rewrite(f);
    For i:= 1 to n do write(f, res[i], ' ');
  Close(f);
End;

Begin
  init;
  solve;
  printresult;
End.

Code mẫu của khuc_tuan

//{$A8,B-,C+,D+,E-,F-,G+,H+,I+,J-,K-,L+,M-,N+,O+,P+,Q+,R+,S+,T-,U-,V+,W-,X+,Y+,Z1}
// {$APPTYPE CONSOLE}
 {$mode delphi}

type
    ArInt64 = array[1..1000] of int64;
    ArInt32 = array[1..1000] of integer;

var
    i, n, t : integer;
    w, d, p : ArInt64;
    r, iw, ip : ArInt32;

procedure sort(var a : ArInt64; var p : ArInt32);
var
    i,j,t : integer;
begin
    for i:=1 to n do
        for j:=i+1 to n do
            if a[p[j]] > a[p[i]] then
            begin
                t := p[i];
                p[i] := p[j];
                p[j] := t;
            end;
end; 

begin
    read(n,t);
    for i:=1 to n do read(w[i]);
    for i:=1 to n do read(d[i]);
    for i:=1 to n do
    begin
        read(p[i]);
        p[i] := p[i] - d[i] * t;
        iw[i] := i;
        ip[i] := i;
    end;
    sort( w, iw);
    sort( p, ip);
    for i:=1 to n do r[ip[i]] := iw[i];
    for i:=1 to n do write(r[i], #32);
end.

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.