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

Обсуждение задачи 1003. Чётность

parity problem (1003)
Послано xdex 6 мар 2003 17:31
people, if you have some idea about solution of problem, please write.
i've tried to generate all possible intervals, but it failed because
of memory limit exceed.
use dispose
Послано Lin 6 мар 2003 18:15
> people, if you have some idea about solution of problem, please
write.
> i've tried to generate all possible intervals, but it failed
because
> of memory limit exceed.
But i allways get TLE and WA :( dispose is just for linked lists isn`t it?)
Послано Locomotive 6 мар 2003 18:34
4YBAKI, HE GOHITE ????
Послано xdex 6 мар 2003 22:11
>
Re: parity problem (1003)
Послано TheBlaNK 8 мар 2003 00:47
> people, if you have some idea about solution of problem, please write.
> i've tried to generate all possible intervals, but it failed because
> of memory limit exceed.

u don't have to generate all possible,keep the smallest one
I tried to solve it with doubly linked list but i always got CRASH
So at last i use array to keep the intervals and got AC
in 0.941 sec 86K (bad time but at least AC)

( i use insertion sort to sort the interval
everytime i update cuz i think it's the fastest na)
+^^+ Help!
Послано Locomotive 8 мар 2003 17:00
So may you say that how you do insertion?
i mean but which value of interval?
such as first limit or something else???
Best
Aidin
Re: +^^+ Help!
Послано TheBlaNK 8 мар 2003 19:05
i sort it by the first
it help u to update the intervals
Anyway my PROG's below
don't see if u don't want :)
GooD LucK,
TheBlaNK
















#include <stdio.h>
#include <stdlib.h>
#define MAX 5005
FILE *fp,*fx;
struct node
{
 long b,e;
 char st;
};
struct node arr[MAX];
long many,n;

long insert(long b,long e,long s)
{
 long tmpb,tmpe,j,i,tmpst;
 for(i=0;i<many&&b>=arr[i].b;i++)
   {
    if(arr[i].b==b)
      {
    if(arr[i].e<e) { b=arr[i].e+1; s=(arr[i].st)^s; }
    else if(arr[i].e>e) { tmpst=s; s=(arr[i].st)^s; b=e+1;
             e=arr[i].e; arr[i].e=b-1; arr
[i].st=tmpst; }
    else if(arr[i].st==s) return 0;
    else return 1;
      }
   }
 for(i=0;i<many;i++)
   {
    if(arr[i].e==e)
      {
    if(arr[i].b>b) { e=arr[i].b-1; s=(arr[i].st)^s; }
    else if(arr[i].b<b) { tmpst=s; s=(arr[i].st)^s; e=b-1;
              b=arr[i].b; arr[i].b=e+1; arr
[i].st=tmpst; }
    else if(arr[i].st==s) return 0;
    else return 1;
      }
   }
 arr[many].b=b; arr[many].e=e; arr[many].st=s;
 many++;
 for(i=1;i<many;i++)
  {
   tmpb=arr[i].b; tmpe=arr[i].e; tmpst=arr[i].st;
   for(j=i-1;j>=0&&arr[j].b>tmpb;j--)
    { arr[j+1].b=arr[j].b; arr[j+1].e=arr[j].e; arr[j+1].st=arr[j].st;
    }
   arr[j+1].b=tmpb; arr[j+1].e=tmpe; arr[j+1].st=tmpst;
  }
 return 0;
}

void input(void)
{
 long i,tmp,b,e,sta;
 char s[10];
 while(1)
  {
   fscanf(fp,"%ld",&tmp);
   if(tmp==-1) break;
   fscanf(fp,"%ld",&n);
   i=0;
   many=1;
   if(n>0)
     {
      fscanf(fp,"%ld %ld %s",&b,&e,s);
      if(s[0]=='e') sta=0; else sta=1;
      arr[0].b=b; arr[0].e=e; arr[0].st=sta;
      for(i=1;i<n;i++)
    {
     fscanf(fp,"%ld %ld %s",&b,&e,s);
     if(s[0]=='e') sta=0; else sta=1;
     if(insert(b,e,sta)) break;
    }
     }
   fprintf(fx,"%ld\n",i);
   for(i=i+1;i<n;i++) fscanf(fp,"%ld %ld %s",&b,&e,s);
  }
}

int main()
{
 fp=stdin; fx=stdout;
// fp=fopen("parity.i","r");  fx=fopen("1003-2.out","w");
  input();
// fclose(fp); fclose(fx);
 return 0;
}
C :(((
Послано Locomotive 8 мар 2003 21:56
i donno C at all :(((
Anyway
Thanks