Cod sursa(job #3165127)

Utilizator Emilia23Dobra Emilia Emilia23 Data 5 noiembrie 2023 15:00:42
Problema Ograzi Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <bits/stdc++.h>
#define SIZE 1000002

using namespace std;

ifstream f("ograzi.in");
ofstream g("ograzi.out");

int n,m,w,h;

struct coord
{
    int x,y;
}o[SIZE],ogr[SIZE/2];

map<pair<int,int>,vector<int>>d;

int verif(int x,int y,int o1,int o2)
{
    if(d.find(make_pair(x,y))==d.end())return 0;
    int i,oaie,nr=0;
    for(i=0;i<d[make_pair(x,y)].size();i++)
    {
        oaie=d[make_pair(x,y)][i];
        if((o[oaie].x>=o1 && o[oaie].x<=o1+w) && (o[oaie].y>=o2 && o[oaie].y<=o2+h))nr++;
    }
    return nr;
}

int main()
{
    int i,x,y,sol=0;
    f>>n>>m>>w>>h;
    for(i=1;i<=n;i++)
    {
        f>>ogr[i].x>>ogr[i].y;
    }
    for(i=1;i<=m;i++)
    {
        f>>o[i].x>>o[i].y;
        if(o[i].x%w && o[i].y%h)d[make_pair(o[i].x/w+1,o[i].y/h+1)].push_back(i);
        else if(!(o[i].x%w) && o[i].y%h){
            d[make_pair(o[i].x/w+1,o[i].y/h+1)].push_back(i);
            d[make_pair(o[i].x/w,o[i].y/h+1)].push_back(i);
        }
        else if(o[i].x%w && !(o[i].y%h)){
            d[make_pair(o[i].x/w+1,o[i].y/h+1)].push_back(i);
            d[make_pair(o[i].x/w+1,o[i].y/h)].push_back(i);
        }
        else{
            d[make_pair(o[i].x/w,o[i].y/h+1)].push_back(i);
            d[make_pair(o[i].x/w,o[i].y/h)].push_back(i);
            d[make_pair(o[i].x/w+1,o[i].y/h+1)].push_back(i);
            d[make_pair(o[i].x/w+1,o[i].y/h)].push_back(i);
        }
    }

    for(i=1;i<=n;i++)
    {
        x=ogr[i].x;
        y=ogr[i].y;
        if(!(x%w) && !(y%h))
        {
            sol+=d[make_pair(x/w+1,y/h+1)].size();
        }
        else if(!(x%w) && y%h){
            sol+=verif(x/w+1,y/h+1,x,y);
            sol+=verif(x/w+1,y/h+2,x,y);
        }
         else if(x%w && !(y%h)){
            sol+=verif(x/w+1,y/h+1,x,y);
            sol+=verif(x/w+2,y/h+1,x,y);
        }
        else
        {
            sol+=verif(x/w+1,y/h+1,x,y);
            sol+=verif(x/w+2,y/h+1,x,y);
            sol+=verif(x/w+1,y/h+2,x,y);
            sol+=verif(x/w+2,y/h+2,x,y);
        }
    }
    g<<sol;

}