Cod sursa(job #2562486)

Utilizator As932Stanciu Andreea As932 Data 29 februarie 2020 14:57:18
Problema Grendizer Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.27 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <cmath>
#define nmax 602
using namespace std;
ifstream fin("grendizer.in");
ofstream fout("grendizer.out");

int n,m,x,y,r,ans;
vector < vector <int> > a;

int bin(int j,int val)
{
    int st=0,dr=a[j].size()-1;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(a[j][mij]==val)
            return true;
        else if(a[j][mij]>val)
            dr=mij-1;
        else
            st=mij+1;
    }
   return false;
}

int main()
{
    fin>>n>>m;
    a.resize(nmax);

    for(int i=1;i<=n;i++)
    {
        fin>>x>>y;
        if(x==0)
            a[0].push_back(y);
        else if(x>0)
            a[x+300].push_back(y);
        else
            a[-x].push_back(y);
    }

    for(int i=0;i<=600;i++)
        if(a[i].size())
            sort(a[i].begin(),a[i].end());

    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>r;
        ans=0;

        if(!(x==0 && y==r-abs(0-x)+y))
        {
            if(bin(0,r-abs(0-x)+y) )
                ans++;
        }
        if(!(x==0 && y==-r+abs(0-x)+y))
        {
            if(r!=abs(0-x))
                if(bin(0,-r+abs(0-x)+y))
                    ans++;
        }

        for(int j=1;j<=300;j++)
            if(a[j].size())
            {
                int x1=-j;
                if(!(x==x1 && y==r-abs(x1-x)+y))
                {
                    if(bin(j,r-abs(x1-x)+y))
                        ans++;
                }
                if(!(x==x1 && y==-r+abs(x1-x)+y))
                {
                    if(r!=abs(x1-x))
                        if(bin(j,-r+abs(x1-x)+y))
                            ans++;
                }
            }

        for(int j=301;j<=600;j++)
            if(a[j].size())
            {
                int x1=j-300;
                if(!(x==x1 && y==r-abs(x1-x)+y))
                {
                    if(bin(j,r-abs(x1-x)+y))
                        ans++;
                }
                if(!(x==x1 && y==-r+abs(x1-x)+y))
                {
                    if(r!=abs(x1-x))
                        if(bin(j,-r+abs(x1-x)+y))
                            ans++;
                }
            }

        fout<<ans<<"\n";
    }

    return 0;
}