Pagini recente » Cod sursa (job #1149407) | Cod sursa (job #730394) | Cod sursa (job #2505858) | Cod sursa (job #270479) | Cod sursa (job #552243)
Cod sursa(job #552243)
#include<stdio.h>
#include<malloc.h>
#define omie 100002
using namespace std;
typedef struct _nod
{
long int info;
long long w;
struct _nod *adr;
} nod;
typedef struct
{
int st;
long long w;
long long h;
struct _nod *adr;
} wall;
wall A[100000];
long int n;
long int m;
long int search(int nr,int li,int ls)
{
if(li<ls)
{
if(nr>=A[(li+ls)/2].st && nr<A[(li+ls)/2+1].st)
return (li+ls)/2;
else if(nr>=A[(li+ls)/2-1].st && nr<A[(li+ls)/2+1].st)
return (li+ls)/2-1;
else if(A[(li+ls)/2].st>nr)
return search(nr,li,((li+ls)/2)-1);
else if(A[(li+ls)/2].st<nr)
return search(nr,((li+ls)/2)+1,ls);
}
return (li+ls)/2;
}
int prel(int X,int H,long int *rez,long int *col)
{
long int po = search(X,1,n);
while(H>A[po].h && po) po--;
*rez = po;
if(po)
{
if(A[po].adr)
{
nod *q = A[po].adr;
while(q && q->info != H) q = q->adr;
if(!q)
{
nod *nou = (nod*)malloc(sizeof(nod));
nou->w = A[po].w - 1;
nou->info = H;
q->adr = nou;
nou->adr = NULL;
q = nou;
*col = A[po].st + q->w - 1;
}
else
{
*col = A[po].st + q->w - 1;
q->w --;
}
if(!(q->w))
{
A[po].h = H-1;
return 3;
}
else
return 2;
}
else
{
A[po].adr = (nod*)malloc(sizeof(nod));
A[po].adr->info = H;
A[po].adr->adr = NULL;
A[po].adr->w = A[po].w - 1;
*col = A[po].st + A[po].w - 1;
if(A[po].adr->w)
return 2;
else
return 3;
}
}
else
return 1;
}
void citire(void)
{
long long a;
long long b;
long int po;
long int po2;
long int rasp;
FILE *f = fopen("walls.in","r");
FILE *g = fopen("walls.out","w");
fscanf(f,"%ld ",&n);
A[1].st = 1;
for(int i=1;i<=n;i++)
{
fscanf(f,"%lld %lld",&A[i].w,&A[i].h);
A[i+1].st = A[i].st + A[i].w + 1;
}
fscanf(f,"%d",&m);
/* for(int i=1;i<=m;i++)
{
fscanf(f,"%lld %lld",&a,&b);
rasp = prel(a,b,&po,&po2);
if(rasp == 1)
fprintf(g,"MISS\n");
else if(rasp == 2)
fprintf(g,"HIT %d %d NO\n",po2,po);
else if(rasp == 3)
fprintf(g,"HIT %d %d YES\n",po2,po);
}
*/
fclose(f);
fclose(g);
}
int main()
{
citire();
// printf("%d ",search(9,1,n));
return 0;
}