In this HackerEarth Shil and Survival Game problem solution Navi is a counterstrike pro. He always says how good he is at counterstrike. After being tired of Navi, his friends decided to test his skills at shooting. They put M targets on an X - Y plane, each target is denoted by (X, Y) where X is x-coordinate and Y is y-coordinate. His friends also gave him N locations on the X - Y plane from where Navi can shoot the targets. Navi knows that he can shoot a target if the Manhattan distance between his location and target is ≤ D. If Navi can shoot more than half of the targets (for odd values of M check only for an integral part of half of M, say M = 3,2/3, 2/3 = 1 ) only then his friends believe that he is a pro at counter strike otherwise he is not.


HackerEarth Counter Strike problem solution


HackerEarth Counter-Strike problem solution.

#include <bits/stdc++.h>

using namespace std;

int abss(int x)
{
if (x < 0) return -x;
return x;
}

struct point {
int x,y;
} targets[1001], pos[1001];

int main()
{
int t;
scanf("%d", &t);
while(t--) {
int n, m, i, j, ctr, d;
ctr = 0;
scanf("%d%d%d", &n, &m, &d);
for(i = 0; i < n; i++) {
scanf("%d%d", &pos[i].x, &pos[i].y);
}
for(i = 0; i < m; i++) {
scanf("%d%d", &targets[i].x, &targets[i].y);
}
for(j = 0; j < m; j++) {
for(i = 0; i < n; i++) {
if(abss(pos[i].x - targets[j].x) + abss(pos[i].y - targets[j].y) <= d) {
ctr++;
break; // so that a particular target will be counted once
}

}
}
if(ctr > (m)/2) printf("YES\n");
else printf("NO\n");
}
return 0;
}


Second solution

#include <bits/stdc++.h>
using namespace std ;
#define LL long long int
#define ft first
#define sd second
#define PII pair<int,int>
#define MAXN 1000001
#define mp make_pair
#define f_in(st) freopen(st,"r",stdin)
#define f_out(st) freopen(st,"w",stdout)
#define sc(x) scanf("%d",&x)
#define pr(x) printf("%lld\n",x)

int N,M,D,T;
vector<PII> target , position ;
vector<bool> V;

int dist(PII &a,PII &b){
return (abs(a.ft - b.ft) + abs(a.sd - b.sd)) ;
}

bool check(PII &a,PII &b){
return (dist(a,b) <= D) ;
}
int main(){
sc(T) ;
assert(T <= 6 && T >= 1) ;
while(T--){
sc(N) , sc(M) , sc(D) ;
assert(N <= 1000 && N >= 1) ;
assert(M <= 1000 && M >= 1) ;
assert(D <= 50000 && D >= 1) ;
position.resize(N+1) ;
target.resize(M+1) ;
V.resize(M+1) ;
fill(V.begin(),V.end(),0) ;
for(int i=1;i<=N;i++){
sc(position[i].ft) ;
sc(position[i].sd) ;
assert(position[i].ft <= 50000 && position[i].ft >= -50000) ;
assert(position[i].sd <= 50000 && position[i].sd >= -50000) ;
}
for(int i=1;i<=M;i++){
sc(target[i].ft) ;
sc(target[i].sd) ;
assert(target[i].ft <= 50000 && target[i].ft >= -50000) ;
assert(target[i].sd <= 50000 && target[i].sd >= -50000) ;
}
bool ok = 0 ;
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
if(check(position[i],target[j]))
V[j] = 1 ;
}
}
int cnt = 0 ;
for(int i=1;i<=M;i++){
if(V[i]) cnt ++ ;
}
if(cnt > M/2)
ok = 1 ;
puts(ok ? "YES" : "NO") ;
}
return 0 ;
}