На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Сторінок: 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