forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Задачка (http://forum.boolean.name/showthread.php?t=13825)

den 04.12.2010 21:37

Задачка
 
Помогите пожалуста!:''((
Я уже в полном отчаинее:mad:
Вобщем есть одна задача.
В программе пользователь вводит число n, а программа выводит число k;
Ну я написал это:
Код:

#include <iostream>
using namespace std;

int main()
{
        int n;
        cin >> n;
        cout << (4*n)/3;
        return 0;
}

НО одна проверяющая система сказала
Цитата:

Неверный ответ на тесте 13
Я ВПАНИКЕ!!!11
ЧТО НЕ ТАК:)
Взарание спасибо:rolleyes:

den 04.12.2010 22:59

Ответ: Задачка
 
эээ, импер, зачем свой пост удалил, он же мне помог:)

ещё вопросик. последний
Вот задача
Цитата:

Дана куча строк. Далее заданы запросы, представляющие собой некоторые строки. Для каждого префикса каждого запроса необходимо вывести количество строк в куче, которые имеют такое же начало, как и префикс запроса.

Входные данные: В первой строке содержится два целых числа N и М – количество строк в куче и количество запросов. (1 <= N, M <= 105). Далее записаны N строк кучи. Далее содержится строк M запросов. Все строки состоят из маленьких латинских букв. Длина любой строки ввода не превышает 21 символ.

Выходные данные: Для каждого запроса выведите в отдельной строке L чисел через пробел, где L – длина строки запроса. Каждое i-ое число должно содержать ответ задачи для префикса длины i строки запроса.

Пример входных данных
3 4
abacaba
dabaduba
abad
abac
aba
dab
adcb

Пример выходных данных
2 2 2 1
2 2 2
1 1 1
2 0 0 0
вот мой код:
PHP код:

#include <iostream>
#include <string>
using namespace std;

string str_masN[100001], str_masM[100001];

int main()
{
    
int nm;
    
cin >> >> m;
    for(
int i 0ni++)
        
cin >> str_masN[i];
    for(
int i 0mi++)
        
cin >> str_masM[i];
    
    for(
int i 0mi++)
    {
        
int size  str_masM[i].size();
        const 
char buf str_masM[i].c_str();
        for(
int j 1<= sizej++)
        {
            
int nn 0;
            for(
int k 0nk++)
            {
                if(
str_masN[k].find(buf0j) == 0)
                    
nn++;
            }
            if(
nn == 0)
            {
                for(
int l 0size 1l++) cout << << ' ';
                break;
            }
            
cout << nn << ' ';
        }
        
cout << endl;
    }
    return 
0;


он абсолютно рабочий, но сцуко на 165 мс больше положенного времени выполняется:-)
Как ещё его можно оптимизировать?

baton4ik 05.12.2010 00:27

Ответ: Задачка
 
Ну, во-первых, зачем такой большой размер массивов:
string str_masN[100001], str_masM[100001];
Ведь в условии сказано максимальный размер, так сделай так:
string str_masN[105], str_masM[105];
Это тоже влияет на быстродействие

ABTOMAT 05.12.2010 01:35

Ответ: Задачка
 
Может, для быстродействия не стоит юзать класс string ? В задании было что-то по этому поводу? (в код не вникал особо)

den 05.12.2010 10:39

Ответ: Задачка
 
baton4ik, то не 105, то 10^5:)

den 05.12.2010 18:07

Ответ: Задачка
 
Вот есть динамический массив:
Код:

string *mas = new string[n];
как сделать чтоб элементами массива были не string, а char[24] ?

den 05.12.2010 18:13

Ответ: Задачка
 
А можно чуть чуть поподробней:)

UPD - эээ, импер, это чо новая фишка штоли, удалять свои посты?:)

impersonalis 05.12.2010 18:56

Ответ: Задачка
 
да не - старая

den 08.12.2010 20:14

Ответ: Задачка
 
Есть два char массива: "qwerty" и "qweaty".
Как видно, последний совпавший символ у этих строк - e - 2 символ(если от 0 щитать).
Как наиболее быстро (важно каждая мс) увеличить каждый элемент c 0 до 2 (в данном случае) другого int массива на 1?
Только не говорите типо сам делай, это просто. Я знаю. Но я повторюсь вожна каждая милдисекунда:)

Morganolla 08.12.2010 20:31

Ответ: Задачка
 
char a[];
char b[];
int i[];
int c=0;// индекс массива
while(a[c]==b[c]) i[c++]++;


Часовой пояс GMT +4, время: 05:34.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot