Cod sursa(job #1813322)

Utilizator Bodo171Bogdan Pop Bodo171 Data 22 noiembrie 2016 21:09:14
Problema Ograzi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.19 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int mod=(1<<17);
const int nmax=200005;
struct ograda
{
    int l,c,loc;
}aux;
string str;
vector<ograda> v[mod+5];
int key,i,j,n,m,xt,yt,xf,yf,ret,w,h,tot,c,num,cadran,lin,col,xi,yi,wh,locatii[nmax],x[nmax][4],y[nmax][4],myloc,locatiile;
void ins()
{
    key=(lin*1000+col)&mod;
    for(int idx=0;idx<v[key].size();idx++)
    {
        if(v[key][idx].l==lin&&v[key][idx].c==col)
        {
            myloc=v[key][idx].loc;
            x[myloc][cadran]=xi;
            y[myloc][cadran]=yi;
            return;
        }
    }
    locatiile++;
    aux.l=lin,aux.c=col,aux.loc=locatiile;
    x[locatiile][cadran]=xi;
    y[locatiile][cadran]=yi;
    v[key].push_back(aux);
}
void finds()
{
    key=(xf*1000+yf)&mod;ret=0;
    for(int idx=0;idx<v[key].size();idx++)
    {
        if(v[key][idx].l==xf&&v[key][idx].c==yf)
        {
            myloc=v[key][idx].loc;
            if(x[myloc][0]>=xt&&y[myloc][0]>=yt) ret=1;
            if(x[myloc][1]!=0&&x[myloc][1]<=xt&&y[myloc][1]>=yt) ret=1;
            if(x[myloc][2]!=0&&x[myloc][2]<=xt&&y[myloc][2]<=yt) ret=1;
            if(y[myloc][3]!=0&&x[myloc][3]>=xt&&y[myloc][3]<=yt) ret=1;
            return;
        }
    }
    return;
}
int getnum()
{
    num=0;
    while(str[c]>='0'&&str[c]<='9')
    {num=num*10+str[c]-'0';c++;}
    c++;
    return num;
}
int main()
{
    ifstream f("ograzi.in");
    ofstream g("ograzi.out");
    getline(f,str);
    c=0;
    n=getnum();m=getnum();w=getnum();h=getnum();
    for(i=1;i<=n;i++)
    {
        getline(f,str);
        c=0;
        xt=getnum();yt=getnum();
        xt++;yt++;
        xf=xt/w;yf=yt/h;
        cadran=2,lin=xf,col=yf,xi=xt,yi=yt;
        ins();
        cadran=3,lin=xf+1,col=yf,xi=xt+w,yi=yt;
        ins();
        cadran=0,lin=xf+1,col=yf+1,xi=xt+w,yi=yt+h;
        ins();
        cadran=1,lin=xf,col=yf+1,xi=xt,yi=yt+h;
        ins();
    }
    for(i=1;i<=m;i++)
    {
        getline(f,str);
        c=0;
        xt=getnum();yt=getnum();
        xt++;yt++;
        xf=xt/w;yf=yt/h;
        finds();
        tot+=ret;
    }
    g<<tot;
    return 0;
}