Cod sursa(job #1813311)

Utilizator Bodo171Bogdan Pop Bodo171 Data 22 noiembrie 2016 20:59:36
Problema Ograzi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int mod=26459;
struct ograda
{
    int l,c,x[4],y[4];
}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;
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)
        {
            v[key][idx].x[cadran]=xi;
            v[key][idx].y[cadran]=yi;
            return;
        }
    }
    for(j=0;j<=3;j++)
        aux.x[j]=aux.y[j]=0;
    aux.l=lin,aux.c=col,aux.x[cadran]=xi,aux.y[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)
        {
            aux=v[key][idx];
            if(aux.x[0]>=xt&&aux.y[0]>=yt) ret=1;
            if(aux.x[1]!=0&&aux.x[1]<=xt&&aux.y[1]>=yt) ret=1;
            if(aux.x[2]!=0&&aux.x[2]<=xt&&aux.y[2]<=yt) ret=1;
            if(aux.y[3]!=0&&aux.x[3]>=xt&&aux.y[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;
}