Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2012, 01:04   #1
RocBoy-D
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 10
По умолчанию Задача на Си.

В первой строке даны два целых числа N и M; 1 ≤ N, M ≤ 100. В следующих M строках идёт описание маршрутов трамвая следующим образом: в начале строки находится целое число L (1 ≤ L ≤ 100), задающее число остановок в маршруте. Затем идут L целых чисел, задающих номера остановок в маршруте. Все числа в строке разделены пробелами. Затем следует строка с целым числом K (1 ≤ K ≤ 100), где К - количество друзей, которые хотят встретиться на остановке. В следующих K строках дана информация для каждого из них, по строке на человека. В начале строки указано целое положительное число, задающее количество денег в рублях у человека. Затем указан номер остановки, до которой он доходит от дома пешком. За ним следует либо число 0, если этот человек не имеет проездного, либо 1, если имеет. Числа в строке разделены пробелами. Никто из друзей не имеет больше 1000 рублей.
Выведите два числа: номер остановки, на которой рациональнее встретиться (если таких номеров несколько, выведите наименьший), и суммарное количество рублей, затраченное на поездки друзьями. Числа должны быть разделены пробелом. Если друзья не смогут все встретиться на одной остановке, выведите единственное число 0.
Код:
#include <stdio.h>

void main()
{
  int map[100][100],s[100],g[100],f[100],a,b,i,j,n,m,k,l,p,r;
  scanf("%d%d",&n,&m);
  for(a=0;a<n;a++)
     for(b=0;b<n;b++)
        map[a][b]=16000;
  for(i=0;i<m;i++)
  {
     scanf("%d",&l);
     for(j=0;j<l;j++)
        scanf("%d",&s[j]);
     for(a=0;a<l;a++)
        for(b=0;b<l;b++)
         map[s[a]][s[b]]=1;
  }
  for(a=0;a<n;a++)
      for(b=0;b<n;b++)
          for(i=0;i<n;i++)
              if(map[a][b]>map[a][i]+map[i][b]) 
                   map[a][b]=map[a][i]+map[i][b];
  scanf("%d",&k);
  a=0;
  for(i=0;i<k;i++)
  {
     scanf("%d%d%d",&g[i],&s[i],&f[i]);
     a+=g[i];
  }
  p=0;
  r=p;
  for(i=0;i<n;i++)
  {
       p=0;
       for(j=0;j<k;j++)
       {
          if(i==s[j]) { p+=g[j]; continue;}
          if(map[i][s[j]]=16000) {p=0; break;}
          if(map[i][s[j]]*4>g[j] && f[j]==0) { p=0; break;}
          if(f[j]=1) { p+=g[j]; continue;}
          p+=g[j]-map[i][s[j]]*4;
          }
        if(p>r) { r=p; l=i;}
  }
  if(r!=0) printf("%d %d",l,a-r);
  else putchar('0');
  system("PAUSE");
}
Подскажите, в чем ошибка?

Последний раз редактировалось ACE Valery; 10.03.2012 в 19:41.
RocBoy-D вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача о станках Задача Джонсона Aiga Помощь студентам 4 05.02.2012 21:48
Задача о стрелках (задача Майхелла) Silly Student Помощь студентам 0 14.12.2011 22:20
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51