IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Треугольные волны
сообщение
Сообщение #1


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Всем привет smile.gif

Решил в качестве хобби в последнее время убить двух зайцев, поизучать с++ и порешать интересные задачки, нашел сайт с онлайнтестером и начал решать. На одной из задач (достаточно простой по моему мнению), мне упорно заявляют Wrong answer mad.gif Где и в чем моя ошибка я понять не могу, подозреваю, что в силу недостаточного знания английского, не точно понял формат ввода/вывода данных или часть условия, хотя все кажется ясным.

Задание (на английском языке) находится тут: http://acm.uva.es/p/v4/488.html
Еще одно описание с тестовыми данными тут: http://www.algorithmist.com/index.php/UVa_488
Онлайн судья тут: http://uva.onlinejudge.org/

мой код тут:


#include <iostream>
#include <string>
#include <vector>

using namespace std;

int tests, freq, ampl;
string blank, result_str;

string get_wave( int a )
{
string wave;
vector<string> lines;

for (int i = 0; i < a; i++ )
{
string line;
char c = (char)(49 + i);

for ( int j = 0; j <= i; j++ )
{
line.push_back©;
}
lines.push_back(line);
}

for (int i = 0; i < 2 * a - 1; i++)
{
int idx = i < a ? i : (2*a - i - 2);

wave.append(lines[idx]);
wave.append("\n");
}

return wave;
}

int main()
{

cin >> tests; // читаем кол-во тестов
getline( cin, blank ); // читаем пустую строку

while ( --tests >= 0 )
{
cin >> ampl; // по каждому тесту читаем 2 подрят идущих строки с амплитудой и частотой
cin >> freq;
// далее никаких пустых строк не читаем, получаеим и сохраняем результат для данного теста и переходим к чтению следующих 2-х строк (если это не последний тест)
string wave = get_wave( ampl );
for (int i = 0; i < freq; ++i )
{
result_str.append( wave );
if (!( i == freq - 1 && tests == 0))
{
result_str.append("\n");
}
else
{
result_str.erase(result_str.length() - 1);
}
}
}

cout << result_str;
return 0;
}



Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(klem4 @ 1.12.2010 22:43) *
подозреваю, что в силу недостаточного знания английского, не точно понял формат ввода/вывода
Я подозреваю, что дело в пустых строках.. Проверить сейчас не могу (. Пришли, плз, результат работы с такими входными данными:
2

3
2

4
3

Только постарайся точнее. То есть, выведи в файл t.txt, например, и прикрепи сюда.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
Я подозреваю, что дело в пустых строках..
Нет... Только что проверил (принудительно читал пустую строку после каждой пары Ampl/Freq), он все равно выдает Wrong Answer (klem4, я твой код не спалил, по-другому сделал чуть-чуть, если надо - потом объясню, ты много лишнего делаешь, все проще гораздо, в STL много разных конструкторов, циклы не нужны)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Lapp, В приведенном тобой наборе входных данных между парами амплетуды и частоты есть пустая строка, в тестовом примере на этой странице, ее нету
3
2
4
3
, а на странице онлайтестера приведены данные для одного теста sad.gif

Если адаптировать чтение данных учитывая этот пробел, результат будет такимже как и без него smile.gif . Файл присоединяю. И добавляю комментарии в код.

добавлено: volvo, было бы интересно посмотреть на более короткое решение, с STL только недавно познакомился)

Сообщение отредактировано: klem4 -


Прикрепленные файлы
Прикрепленный файл  t.txt ( 100 байт ) Кол-во скачиваний: 158


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(klem4 @ 1.12.2010 23:34) *
Lapp, В приведенном тобой наборе входных данных между парами амплетуды и частоты есть пустая строка, в тестовом примере на этой странице, ее нету

Гм.
Цитата
, and there is also a blank line between two consecutive inputs
- как тогда понимать это? Видимо, так, что input != set, и может быть несколько input'ов.. ??


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






В общем, у меня получилось вот так:

#include <iostream>
#include <vector>
#include<iterator>

using namespace std;

void get_wave(int ampl)
{
for(int j = 1; j <= ampl; j++)
{
vector<int> v(j, j);
copy(v.begin(), v.end(), ostream_iterator<int>(cout, ""));
cout << endl;
}

for(int j = ampl - 1; j > 0; j--)
{
vector<int> v(j, j);
copy(v.begin(), v.end(), ostream_iterator<int>(cout, ""));
cout << endl;
}
}

int main()
{
long tests;
while(cin >> tests)
{
long ampl, freq;
for(long k = 1; k <= tests; k++)
{
cin >> ampl >> freq;
for(long i = 1; i <= freq; i++)
{
get_wave(ampl);
if(i < freq || k < tests) { cout << endl; }
}
}
}
return 0;
}

. Они действительно подразумевают возможность нескольких input-ов...

klem4, можно, наверное, и в одну строку все вытягивать, но по-моему, смысла нет, лучше печатать порцию после каждого input-а... (я переделал на vector<int>, чтоб с твоим решением не совпадало, а то мало ли, может они там отслеживают unsure.gif )
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Я так понимаю, этот вариант тебе сдать удалось ? Не очень ясно, чтоже надо ввести, чтобы внешний while закончился) Если только не цифру.. unsure.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Не надо "не цифру", введи Ctrl+Z - это остановит работу с потоком (и это то, что сделает онлайн-тестер), и все корректно завершится.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.10.2020 6:17
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name