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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.02.2013, 20:14   #1
kostan3
- Дорогой, а ты ку
Форумчанин
 
Регистрация: 06.10.2012
Сообщений: 184
Восклицание не проходит по времени

НА ЭТУ ЗАДАЧУ
ВОТ МОЙ код
Код:
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <cmath>
#include <cstdlib>
#include <utility>
using namespace std;

#define forn(i, n) for(int i = 0; i < n; i++)

struct planet
{
short int from[3], to[3];
bool type;
};
struct q_st
{
vector <char> p;
int mask;
short int c, pass[3];
};

int in_q[2086014], st[22], nm;
short int tc, n;
vector <q_st> q[2];
char h;
planet p[22];

int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
scanf("%hd\n", &n);
st[0] = 1;
forn(i, 2086014) in_q[i] = -1;
forn(i, 21)
st[i + 1] = st[i] * 2;
q[0].resize(1);
q[0][0].mask = 0;
q[0][0].c = 0;
q[0][0].pass[0] = 0;
q[0][0].pass[1] = 0;
forn(i, n)
{
scanf("%c %hd %hd %hd %hd\n", &h, &p[i].to[0], &p[i].to[1], &p[i].from[0], &p[i].from[1]);
q[0][0].pass[0] += p[i].to[0];
q[0][0].pass[1] += p[i].to[1];
p[i].type = (h == 'C');
}
bool now = 0;
do
{
forn(i, q[now].size())
forn(j, n)
if((q[now][i].mask & st[j]) == 0)
{
nm = (q[now][i].mask | st[j]);
tc = q[now][i].c + q[now][i].pass[p[j].type] - p[j].to[p[j].type];
if(in_q[nm] == -1)
{
in_q[nm] = q[!now].size();
q[!now].resize(q[!now].size() + 1);
q[!now][in_q[nm]].c = 30000;
q[!now][in_q[nm]].mask = nm;
}
if(tc < q[!now][in_q[nm]].c)
{
q[!now][in_q[nm]].c = tc;
q[!now][in_q[nm]].pass[0] = q[now][i].pass[0] - p[j].to[0] + p[j].from[0];
q[!now][in_q[nm]].pass[1] = q[now][i].pass[1] - p[j].to[1] + p[j].from[1];
q[!now][in_q[nm]].p = q[now][i].p;
q[!now][in_q[nm]].p.push_back(j);
}
}
q[now].clear();
now = !now;
}
while(q[now].size() != 1);
printf("%hd 0 ", q[now][0].c);
forn(i, q[now][0].p.size())
printf("%hd ", q[now][0].p[i] + 1);
printf("0");
return 0;
}
на превышен лимит времени на 21 тесте
kostan3 вне форума
Старый 18.02.2013, 20:26   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Во-первых, кросспостиг запрещен.
Во-вторых, да - сложная Это 9 по сложности задача на том сайте.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не проходит по времени kostan3 Visual C++ 1 17.02.2013 15:53
Не проходит компановка Artemprodigy Visual C++ 1 27.10.2010 23:53
Не проходит авторизация KREGI Работа с сетью в Delphi 4 24.08.2009 22:15
Не проходит валидность Ururu HTML и CSS 2 05.04.2009 15:54