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