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

Обсуждение задачи 1452. Pascal против C++

Crash <acces violant> on test 3! Pls help
Послано Roman Furko 17 июн 2011 01:41
Why Crash (acces violant)
I use vector < map <int,int> > ! Are the problem in it?

P.S Sorry for my bad English

#include <cstdio>
#include <vector>
#include <algorithm>
#include <map>
#include <iostream>
#include <cstdlib>

using namespace std;

struct neww{
 int x,n;
};

int abss(int x)
 {
  if (x>=0) return x;
  else return (-x);
 }

bool funcsort(neww a, neww b)
 {
  if (a.x < b.x) return true;
  else return false;
 }

int main()
{
 int n,i,j,x,maxn;
 neww a[2200];
 scanf("%d",&n);
 vector < map <int,int> > b(12000);
 vector < map <int,int> > pi(12000);
 vector < map <int,int> > pj(12000);

 for (i = 0; i < n; ++i)
     {
      scanf("%d",&a[i].x);
      a[i].n = i + 1;
     }
 sort(a,a+n,funcsort);
 if (n == 1)
  {
   printf("1\n");
   printf("%d\n",1);
   exit(0);
  }

 for (i = n - 1; i >= 0; --i)
   {
      for (j = n - 1; j > i; --j)
         if (a[j].x-a[i].x > 0)
           {
            b[i][a[j].x-a[i].x] = max(b[i][a[j].x-a[i].x],b[j][a[j].x-a[i].x] + 1);
            if (b[i][a[j].x - a[i].x] = b[j][a[j].x-a[i].x] + 1)
             {
              pi[i][a[j].x-a[i].x] = j;
              pj[i][a[j].x-a[i].x] = a[j].x - a[i].x;
             }
           }
   }
 maxn = 0;
 int numb,ost;
 for (i = 0; i < n; ++i)
     for (j = i; j < n; ++j)
            if (b[i][abss(a[i].x - a[j].x)] > maxn)
             {
              maxn = b[i][abss(a[i].x-a[j].x)];
              numb = i;
              ost = abss(a[i].x - a[j].x);
             }
 printf("%d\n",maxn+1);
 printf("%d",a[numb].n);
 while (maxn)
   {
      int nm = pi[numb][ost];
      int ot = pj[numb][ost];

      printf(" %d",a[nm].n);

      numb = nm; ost = ot;
      --maxn;
   }
  printf("\n");

}

Edited by author 17.06.2011 01:42