Hướng dẫn giải của Lâu đài cá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.

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=25000;
type ar=array[1..maxn] of longint;
var n,x,y,re:longint;
    a,b:ar;

procedure rf;
var i:longint;
begin
     assign(input,fi);
     reset(input);
     read(n,x,y);
     for i:=1 to n do read(a[i],b[i]);
     close(input);
end;

procedure sort(var a:ar;l,r:longint);
var x,y,i,j:longint;
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;
                i:=i+1; j:=j-1;
           end;
     until i>j;
     if i<r then sort(a,i,r);
     if l<j then sort(a,l,j);
end;

procedure pr;
var i:longint;
begin
     re:=0;
     sort(a,1,n);
     sort(b,1,n);
     for i:=1 to n do
         if a[i]<b[i] then re:=re+x*(b[i]-a[i])
         else re:=re+y*(a[i]-b[i]);
end;

procedure wf;
begin
     assign(output,fo);
     rewrite(output);
     write(re);
     close(output);
end;

begin
     rf;
     pr;
     wf;
end.

Code mẫu của happyboy99x

#include <algorithm>
#include <bitset>
#include <cctype>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;

typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<vii> vvii;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef long long LL;

#define sz(a) (int((a).size()))
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(c) (c).begin(), (c).end()
#define tr(c,i) for(typeof((c).begin()) i = (c).begin(), _e = (c).end(); i != _e; ++i)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define rep(i,n) for(int i = 0, _n = (n); i < _n; ++i)
#define repd(i,n) for(int i = (n)-1; i >= 0; --i )
#define fo(i,a,b) for(int i = (a), _b = (b); i <= _b; ++i)
#define fod(i,a,b) for(int i = (a), _b = (b); i >= _b; --i)

#define INF 1000000000
#define N 25000+5

int a[N], b[N], n;
LL x, y;

int main() {
    scanf("%d%lld%lld", &n, &x, &y);
    rep(i,n) scanf("%d%d",a+i,b+i);
    sort(a,a+n); sort(b,b+n);
    LL res = 0;
    rep(i,n)
        if(a[i] > b[i]) res += y*(a[i]-b[i]);
        else res += x*(b[i]-a[i]);
    printf("%lld\n", res);
    return 0;
}

Code mẫu của ladpro98

program ctnews;
uses    math;
var     n,x,y:longint;
        a:array[1..2,1..25555] of longint;
        i:longint;
        res:int64;
procedure input;
var     f:text;
        i:longint;
begin
        assign(f,'');
        reset(f);
        readln(f,n,x,y);
        for i:=1 to n do
        readln(f,a[1,i],a[2,i]);
        close(f);
end;

procedure swap(k,i,j:longint);
var     t:longint;
begin
        t:=a[k,i];
        a[k,i]:=a[k,j];
        a[k,j]:=t;
end;

procedure sort(k,l,r:longint);
var     p,i,j:longint;
begin
        if l>=r then exit;
        p:=a[k,random(r-l+1)+l];
        i:=l;j:=r;
        repeat
                while a[k,i]<p do inc(i);
                while a[k,j]>p do dec(j);
                if i<=j then
                begin
                        if i<j then swap(k,i,j);
                        inc(i);dec(j);
                end;
        until i>j;
        sort(k,l,j);sort(k,i,r);
end;

begin
        input;
        sort(1,1,n);
        sort(2,1,n);
        for i:=1 to n do
        begin
                if a[1,i]>a[2,i] then
                res:=res+(a[1,i]-a[2,i])*y
                else
                res:=res+(a[2,i]-a[1,i])*x;
        end;
        write(res);
end.

Code mẫu của RR

#include <cstdio>
#include <iostream>
#include <algorithm>
#define MAXN 25111
#define FOR(i,a,b) for(long i=a; i<=b; i++)

using namespace std;

long a[MAXN],b[MAXN],x,y,n;

int main() {
    scanf("%ld %ld %ld",&n,&x,&y);
    FOR(i,0,n-1) scanf("%ld %ld",&a[i],&b[i]);
    sort(a,a+n);
    sort(b,b+n);
    long long res=0;
    FOR(i,0,n-1)
      if (a[i]<b[i]) res+=(long long) (b[i]-a[i])*x;
      else res+=(long long) (a[i]-b[i])*y;
    cout<<res;
    return 0;
}

Code mẫu của hieult

#include <stdio.h>
//#include <conio.h>
void Quicksort(long A[],long lower,long upper)
{
        long x = A[(lower + upper) / 2];
        long i = lower;
        long j = upper;
        do{
                while(A[i] < x)
                        i ++;
                while (A[j] > x)
                        j --;
                if (i <= j)
                {
                     long tg=A[i];
                     A[i]=A[j];
                     A[j]=tg;   
                        i ++;
                        j --;
                }
        }while(i <= j);
        if (j > lower)
                Quicksort(A, lower, j);
        if (i < upper)
                Quicksort(A, i, upper);
}  
main()
{
long n,x,y,a[25002],b[25002];
long long KQ=0;
scanf("%ld %ld %ld",&n,&x,&y);
for(long i=1;i<=n;i++)
  scanf("%ld %ld",&a[i],&b[i]);
Quicksort(a,1,n);
Quicksort(b,1,n);
for(long i=1;i<=n;i++)
  {
  if(a[i]>b[i])
    KQ=KQ+(a[i]-b[i])*y;
  else KQ=KQ+(b[i]-a[i])*x;
  }
printf("%lld",KQ);
//getch();
}

Code mẫu của ll931110

#include <iostream>
#include <cstdlib>
#define MAXN 25000
using namespace std;

int compare(const void* u, const void* v)
{
    int* x1 = (int*) u;
    int* y1 = (int*) v;

    if (*x1 > *y1) return -1;
    else if (*x1 == *y1) return 0;
    else return 1;
}

int a[MAXN],b[MAXN],n,x,y;
long long cost;

int main()
{
    int i;

    //freopen("ctnews.inp","r",stdin);
    //freopen("c1.out","w",stdout);

    scanf("%d%d%d", &n, &x, &y);
    for (i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]);

    qsort(a, n, sizeof(int), compare);
    qsort(b, n, sizeof(int), compare);

    cost = 0;
    for (i = 0; i < n; i++)
      if (a[i] > b[i]) cost += y * (a[i] - b[i]);
      else if (a[i] < b[i]) cost += x * (b[i] - a[i]);

    printf("%lld", cost);
}

Code mẫu của khuc_tuan

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <sstream>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <set>
#include <queue>

using namespace std;

#define Rep(i,n) for(int i=0,lll=(n);i<lll;++i)
#define For(i,a,b) for(int i=(a),lll=(b);i<=lll;++i)
#define Ford(i,a,b) for(int i=(a),lll=(b);i>=lll;--i)
#define pb push_back
#define MP make_pair
#define fi first
#define se second
#define nextint __nextint()

inline int __nextint() { int x; scanf("%d", &x); return x; }

int n = nextint;
long long x = nextint, y = nextint;
int a[25000], b[25000];

int main() {
    Rep(i,n) scanf("%d%d", a+i, b+i);
    sort( a, a + n);
    sort( b, b + n);
    long long res = 0;
    Rep(i,n) {
        if(a[i] < b[i]) res += x * (b[i]-a[i]);
        else res += y * (a[i] - b[i]);
    }
    cout << res << endl;
//  system("pause");
    return 0;
}

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.