Hướng dẫn giải của Lập lịch sửa chữa ô tô
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.
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 maxn=10001; var n:longint; re:qword; a,b,c:array[1..maxn] of longint; procedure rf; var i:longint; begin readln(n); for i:=1 to n do read(a[i]); for i:=1 to n do read(b[i]); for i:=1 to n do c[i]:=i; end; procedure sort(l,r:longint); var i,x,j,y,u:longint; begin i:=l; j:=r; x:=a[(i+j) shr 1]; y:=b[(i+j) shr 1]; repeat while a[i]*y>b[i]*x do i:=i+1; while a[j]*y<b[j]*x do j:=j-1; if i<=j then begin u:=a[i]; a[i]:=a[j]; a[j]:=u; u:=b[i]; b[i]:=b[j]; b[j]:=u; u:=c[i]; c[i]:=c[j]; c[j]:=u; i:=i+1; j:=j-1; end; until i>j; if i<r then sort(i,r); if l<j then sort(l,j); end; procedure pr; var i,t:longint; u:qword; begin sort(1,n); re:=0; t:=0; for i:=1 to n do begin t:=t+b[i]; u:=a[i]; u:=u*t; re:=re+u; end; end; procedure wf; var i:longint; begin writeln(re); for i:=1 to n do write(c[i],' '); end; begin rf; pr; wf; end.
Code mẫu của happyboy99x
#include <cstdio> #include <algorithm> using namespace std; #define MAX 10000+5 typedef struct { int a, b, i; float x; } car; bool cmp( const car & a, const car & b ) { return a.x < b.x; } car v[MAX]; int n; int main() { int n; scanf( "%d", &n ); for( int i = 0; i < n; ++i ) scanf( "%d", &v[i].a ); for( int i = 0; i < n; ++i ) { scanf( "%d", &v[i].b ); v[i].x = (float) v[i].a / v[i].b; v[i].i = i+1; } sort(v, v+n, cmp); long long money = 0, d = 0; for( int i = n-1; i >= 0; --i ) { d += v[i].b; money += d * v[i].a; } printf( "%lld\n", money ); for( int i = n-1; i >= 0; --i ) printf( "%d ", v[i].i ); putchar('\n'); return 0; }
Code mẫu của RR
import java.io.*; import java.util.*; class Car { int a, b, index; double c; Car() { } } class CarComparator implements Comparator<Car> { public static final double EPS = 1e-9; public int compare(Car X, Car Y) { if (Math.abs(X.c - Y.c) < EPS) return 0; else if (X.c < Y.c) return -1; else return 1; } } public class Main { public static void main(String args[]) { Scanner sc = new Scanner( System.in ); PrintWriter pw = new PrintWriter( System.out ); int n = sc.nextInt(); Car[] a = new Car[n]; for(int i = 0; i < n; i++) a[i] = new Car(); for(int i = 0; i < n; i++) a[i].a = sc.nextInt(); for(int i = 0; i < n; i++) a[i].b = sc.nextInt(); for(int i = 0; i < n; i++) a[i].index = i+1; for(int i = 0; i < n; i++) a[i].c = (double)a[i].b / a[i].a; Comparator<Car> cc = new CarComparator(); Arrays.sort(a, cc); long res = 0, time = 0; for(int i = 0; i < n; i++) { time += a[i].b; res += time * a[i].a; } pw.println(res); for(int i = 0; i < n; i++) pw.print( a[i].index + " "); pw.close(); } }
Code mẫu của hieult
#include <stdio.h> //#include <conio.h> void Quick_Sort(double A[],int d[], int lower,int upper) { double x = A[(lower + upper) / 2]; int i = lower; int j = upper; do{ while(A[i] < x) i ++; while (A[j] > x) j --; if (i <= j) { double tg=A[i]; A[i]=A[j]; A[j]=tg; int tgd=d[i]; d[i]=d[j]; d[j]=tgd; i ++; j --; } }while(i <= j); if (j > lower) Quick_Sort(A,d, lower, j); if (i < upper) Quick_Sort(A,d, i, upper); } int main() { // freopen("SCHEDULE.in0","r",stdin); int n,a[10001],b[10001],so[10001]; double c[10001]; scanf("%d",&n); for(int i = 1;i<=n;i++) { scanf("%d",&a[i]); so[i] = i; } for(int i = 1;i<=n;i++) { scanf("%d",&b[i]); c[i] = b[i]*1./a[i]; } Quick_Sort(c,so,1,n); long long KQ = 0, t = 0; for(int i = 1;i<=n;i++) { t = t+b[so[i]]; KQ = KQ+t*a[so[i]]; } printf("%lld\n",KQ); for(int i = 1;i<=n;i++) printf("%d ",so[i]); //getch(); }
Code mẫu của ll931110
{$MODE DELPHI} const InputFile = ''; OutputFile = ''; max = 10000; var a, b, Index: array[1..max] of Integer; n: Integer; Res: Comp; procedure Enter; var f: Text; i: Integer; begin Assign(f, InputFile); Reset(f); Readln(f, n); for i := 1 to n do Read(f, a[i]); Readln(f); for i := 1 to n do Read(f, b[i]); Close(f); end; procedure Init; var i: Integer; begin for i := 1 to n do Index[i] := i; end; function Lower(i, j: Integer): Boolean; {= a[i]/b[i] > a[j]/b[j]} begin Lower := LongInt(a[i]) * b[j] > LongInt(a[j]) * b[i]; end; procedure QSort(L, H: Integer); var k, i, j, t: Integer; begin if L >= H then Exit; k := Index[Random(H - L + 1) + L]; i := L; j := H; repeat while Lower(Index[i], k) do Inc(i); while Lower(k, Index[j]) do Dec(j); if i <= j then begin t := Index[i]; Index[i] := Index[j]; Index[j] := t; Inc(i); Dec(j); end; until i > j; QSort(L, j); QSort(i, H); end; procedure Solve; var t: LongInt; i, j: Integer; begin t := 0; Res := 0; for i := 1 to n do begin j := Index[i]; t := t + b[j]; Res := Res + a[j] * (t + 0.0); end; end; procedure Result; var f: Text; i: Integer; begin Assign(f, OutputFile); Rewrite(f); Writeln(f, Res:0:0); for i := 1 to n do Write(f, Index[i], ' '); Close(f); end; begin Enter; Init; QSort(1, n); Solve; Result; end. 2 1 1 1 2
Code mẫu của khuc_tuan
import java.io.*; import java.util.*; import static java.lang.Integer.parseInt; public class Main{ static class Element implements Comparable<Element>{ public int a,b,i; public int compareTo(Element x) { return -a*x.b+b*x.a; } } public static void main(String[]Args) throws Exception { BufferedReader kb=new BufferedReader(new InputStreamReader(System.in)); int n=parseInt(kb.readLine()); Element[] a=new Element[n]; for(int i=0;i<n;++i) a[i]=new Element(); StringTokenizer st=new StringTokenizer(kb.readLine()); for(int i=0;i<n;++i) { a[i].a = parseInt(st.nextToken()); a[i].i = i+1; } st=new StringTokenizer(kb.readLine()); for(int i=0;i<n;++i) a[i].b=parseInt(st.nextToken()); Arrays.sort(a); long s=0,r=0; for(Element x:a) { s+=x.b; r+=s*x.a; } System.out.println(r); for(Element x:a) System.out.print(x.i+" "); } }
Bình luận