Pagini recente » Cod sursa (job #2548947) | Cod sursa (job #134060) | Cod sursa (job #2871531) | Cod sursa (job #2337893) | Cod sursa (job #541721)
Cod sursa(job #541721)
#include<stdio.h>
#include<vector>
using namespace std;
typedef struct zid
{
int lat;
int h;
int x;
};
zid v[100001];
vector<int> lovit[100001];
int n,m,Gx,Gy,i,j;
FILE *in,*out;
int main()
{
in=fopen("walls.in","rt");
out=fopen("walls.out","wt");
fscanf(in,"%d",&n);
fscanf(in,"%d %d",&v[1].lat,&v[1].h);
v[1].x=1;
for(i=2;i<=n;i++)
{
fscanf(in,"%d %d",&v[i].lat,&v[i].h);
v[i].x=v[i-1].x+v[i-1].lat+1;
}
fscanf(in,"%d",&m);
for(i=1;i<=m;i++)
{
fscanf(in,"%d %d",&Gx,&Gy);
bool ok=false;
bool okcazut=false;
for(j=n;j>=1;j--)
{
if(v[j].h>=Gy && v[j].x<Gx)
{
int cnt=1;
ok=true;
vector<int>::iterator dit;
fprintf(out,"HIT ");
for(dit=lovit[j].begin();dit!=lovit[j].end();dit++)
{
if(*dit==Gy)
cnt++;
}
if(cnt==v[j].lat)
{
okcazut=true;
v[j].h=Gy-1;
for(dit=lovit[j].begin();dit!=lovit[j].end();dit++)
{
if(*dit>=Gy)
*dit=-1;
}
}
lovit[j].push_back(Gy);
fprintf(out,"%d %d ",(v[j].x+v[j].lat-(cnt-1)-1),Gy);
if(!okcazut)
fprintf(out,"NO\n");
else
fprintf(out,"YES\n");
break;
}
}
if(!ok)
fprintf(out,"MISS\n");
}
return 0;
}