На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Сторінок: 1 2
До хеш таблиць це відноситься. Це два масива, один з яким містить різницю dx = xi - xj а другий dy = yi - yj(грубо говорячи)
Поза форумом
имхо к хеш-таблицам оно относится так же как и к сортировке....
но если отнести это к хеш-таблам, то нада уже 5 массивов...
однин для хранения значений dx dy, другой для хранения хеш-значений, и 4ый для хранения количества, 5ый - указатель на следующий элемент в списке...
Поза форумом
!!
Відредаговано Yevgeniy (2007-01-05 12:21:48)
Поза форумом
Виклади свій код.
Поза форумом
#include<algorithm>
#include<cstdio>
using namespace std;
#define N 1000
#define HASH 2097151
struct Pencil{
int x0,y0,x1,y1;
inline void read(){
scanf("%d%d%d%d",&x0,&y0,&x1,&y1);
if(x0>x1||x0==x1&&y0>y1)
swap(x0,x1),swap(y0,y1);
}
}a[N],b[N],*ae,*be;
int n;
struct FF{
FF*next;
int q;
short c;
}*h[HASH+1],q[N*N],*f=q;
int main(){
freopen("x.in","r",stdin);
freopen("x.out","w",stdout);
scanf("%d",&n),ae=a+n,be=b+n;
Pencil*i,*j;
for(i=a;i<ae;(i++)->read());
for(j=b;j<be;(j++)->read());
int dx,dy,hsh,p,res=0;
FF* k;
for(i=a;i<ae;++i)for(j=b;j<be;++j)
if((dx=(i->x0-j->x0))==(i->x1-j->x1) && (dy=(i->y0-j->y0))==(i->y1-j->y1)){
p=dy^(dx<<15);
hsh=(dx^(dy*519))&HASH;
for(k=h[hsh];k && p!=k->q;k=k->next);
if(k==NULL)
f->next=h[hsh],h[hsh]=f,
f->q=p,(f++)->c=1,res>?=1;
else if(++(k->c)>res)res=k->c;
}
printf("%d\n",n-res);
return 0;
}Поза форумом
НУ ось тест
1
1 0 10 100
1 0 10 100
Має бути 0, твоя прога видає 1
Поза форумом
1
1 3 3 3
5 2 3 2
Має бути 0, видає 1
Поза форумом
Я просто звіряю зі своїми, щоб переконатися в тому, що моя правильна. А те що ти тут виставив, проходить всі мої тести, крім цих двох(в мене коло 20 тестів).
Поза форумом
может проблема с компилятором(у тебя)? я юзаю gcc.. и эти тесты моя прога проходит...
ну раз не желаешь показать код, то я щас сгенерю пару тестов for you... )
Поза форумом
я лутше дам код который будет тесты генерить....
#include<iostream>
#include<cstdio>
#include<ctime>
using namespace std;
#define N 1000
#define R 0
#define S 10000
#define F_CENSORED_K
inline int rnd(){
return (rand()%(S+1))-(rand()%(S+1));
}
int dx,dy;
struct Pencil{
int x0,y0,x1,y1;
inline void random(){
x0=rnd(),y0=rnd(),x1=rnd(),y1=rnd();
}
inline void operator=(Pencil&p){
x0=p.x0+dx,y0=p.y0+dy,
x1=p.x1+dx,y1=p.y1+dy;
}
inline void print(){
#ifdef F_CENSORED_K
printf("%d %d %d %d ",x0,y0,x0+1,y0+1);
#else
printf("%d %d %d %d ",x0,y0,x1,y1);
#endif
}
}a[N],b[N];
bool da[N],db[N];
int main(){
srand(time(0));
freopen("x.in","w",stdout);
printf("%d ",N);
for(int i=0;i<N;++i)
a[i].random(),b[i].random();
dx=rnd(),dy=rnd();
for(int k=N-R;k;--k){
int i,j;
do i=rand()%N;
while(da[i]);da[i]=true;
do j=rand()%N;
while(db[j]);db[j]=true;
a[i]=b[i];
}
for(int i=0;i<N;++i)a[i].print();
for(int i=0;i<N;++i)b[i].print();
return 0;
}R = это правильный ответ
Поза форумом
Гм... господа... здесь не ТопКодер и это не Challenge Phase... ![]()
Поза форумом
Yevgeniy написав:
Я просто звіряю зі своїми, щоб переконатися в тому, що моя правильна. А те що ти тут виставив, проходить всі мої тести, крім цих двох(в мене коло 20 тестів).
а на онлайн мой код набирает 60... ну ладно... уже не в тему... ![]()
Поза форумом
Сторінок: 1 2