ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1151. Радиомаяки

While reading the information of the checkpoints,I can use there coordinates and the distance between it and a certain beacon to determin the range of the beacon.And as more information was read,the range will become smaller and smaller.So after the procedure,if I am sure the beacon is at a point,I output it and it's coordinates,otherwise I output UNKNOWN.Of course after sorting.

I think my algorithm is right if I did understand the idea.
But I got wa even on test 2,who can help me and tell me the meaning of the problem or give me your algorithm,thank you.
This is my code ,I don't think it's wrong ,could you help me checking it?

#include<iostream>
#include<string>
#include<memory>
#include<cstdio>
#include<cstring>
using namespace std;

//#define DEBUG

#ifndef DEBUG
FILE *fin=stdin;
#else
FILE *fin=fopen("1151.txt","r");
#endif


const long maxm=20;
const long maxn=11;
const long maxint=200;
//long map[maxn];
struct node{
    long map,minx,miny,maxx,maxy;
}list[maxn];
long n=0,m;

long insert(long x)
{
    long i;
    for(i=0;i<n;++i){
        if(list[i].map==x)return i;
    }
    list[n].map=x;
    list[n].minx=list[n].miny=1;
    list[n].maxx=list[n].maxy=200;
    ++n;
    return n-1;
}

void read()
{
    long x,y,a,b;
    char ch;
    fscanf(fin,"%ld,%ld",&x,&y);
    //cin>>x>>ch>>y;
    //cin.get(ch);
    ch=getc(fin);
    long i;
    while(ch!='\n'){
        fscanf(fin,"%ld-%ld",&a,&b);
        //cin>>a>>ch>>b;
        i=insert(a);
        if(x+b<list[i].maxx)list[i].maxx=x+b;
        if(x-b>list[i].minx)list[i].minx=x-b;
        if(y+b<list[i].maxy)list[i].maxy=y+b;
        if(y-b>list[i].miny)list[i].miny=y-b;
        if(fscanf(fin,"%c",&ch)==-1)break;
        //cin.get(ch);
        //if(cin.fail())break;
    }
}


int par(int p,int r)
{
    node temp=list[p];
    while(p<r){
        while(p<r&&list[r].map>=temp.map)--r;
        list[p]=list[r];
        while(p<r&&list[p].map<=temp.map)++p;
        list[r]=list[p];
    }
    list[p]=temp;
    return p;
}

void qsort(int p,int r)
{
    if(p<r){
        int q=par(p,r);
        qsort(p,q-1);
        qsort(q+1,r);
    }
}

int main(void)
{
    fscanf(fin,"%ld",&m);
    while(m>0){
        read();
        --m;
    }
    qsort(0,n-1);
    for(long i=0;i<n;++i){
        if(list[i].minx==list[i].maxx&&list[i].miny==list[i].maxy){
            //printf("%ld:%ld,%ld\n",list[i].map,list[i].maxx,list[i].maxy);
            cout<<list[i].map<<':'<<list[i].maxx<<','<<list[i].maxy<<endl;
        }
        else{
            //printf("%ld:UNKNOWN\n",list[i].map);
            cout<<list[i].map<<":UNKNOWN"<<endl;
        }
    }
    return 0;
}
I rewrite my program and it still got wa on test 2,could anybody help me?????
I'm sure your understanding is right.