| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为神马G++就RE, C++却AC//G++ RE C++ AC
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cmath>
using namespace std;
const int MAX = 10000+100;
int Rand(int p, int r)
{
srand((unsigned)time(NULL));
return p + rand()%(r-p+1);
}
void Exchange(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
int Partition(int a[], int p, int r)
{
int i, j;
int x = a[r];
i = p-1;
for (j=p; j<r; j++)
{
if (a[j] <= x)
{
i++;
if (i != j)
Exchange(a[i], a[j]);
}
}
Exchange(a[i+1], a[r]);
return i+1;
}
int RandPartition(int a[], int p, int r)
{
int i = Rand(p, r);
Exchange(a[r], a[i]);
return Partition(a, p, r);
}
int RandSelect(int a[], int p, int r, int i)
{
if (p == r)
return a[p];
int q = RandPartition(a, p, r);
int k = q-p+1;
if (i == k)
return a[q];
else
if (i < k)
return RandSelect(a, p, q-1, i);
else
return RandSelect(a, q+1, r, i-k);
}
void QuickSort(int a[], int p, int r)
{
if (p < r)
{
int q = RandPartition(a, p, r);
QuickSort(a, p, q-1);
QuickSort(a, q+1, r);
}
}
int x[MAX], y[MAX], N;
int main(int argc, char *argv[])
{
scanf("%d", &N);
int i, sum=0;
for (i=0; i<N; i++)
scanf("%d%d", &x[i], &y[i]);
QuickSort(x, 0, N-1);
for (i=0; i<N; i++)
x[i] = x[i] - i;
int kx = RandSelect(x, 0, N-1, (N+1)/2);
int ky = RandSelect(y, 0, N-1, (N+1)/2);
for (i=0; i<N; i++)
sum = sum + abs(y[i]-ky) + abs(x[i]-kx);
printf("%d\n", sum);
return EXIT_SUCCESS;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator