• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Alokacja tablicy o rozmiarze 10^6 bajta

VPS Starter Arubacloud
0 głosów
359 wizyt
pytanie zadane 30 stycznia 2022 w C i C++ przez dubajstan Nowicjusz (160 p.)

Hej, w zadaniu nalezalo policzyc ile jest tych samych znakow pod rzad w ciagu znakow 's' i 'b'. Problem polega na tym, ze dlugosc takiego ciagu moze wynosic nawet milion znakow. Jak stworzyc tablice charow o takim rozmiarze i wpisac pozniej do niej znaki z wejscia?

Na wejsciu ma znajdowac sie ciag znakow 's' i 'b' np: "ssbbbbbbssbsss" , i moze ich byc nawet milion. Nastepnie wpisuje sie ilosc testow i pozniej numery komorek. Na wyjsciu program ma za zadanie napisac ile znakow pod rzad jest w danym ciagu np. dla "ssbbbbbssb", dla jednego testu i wpisaniu np. 2 program powinien wypisac 5, poniewaz w ciagu w ktorym znajduje sie komurka o numerze 2 jest 5 znakow 'b'. Reszte algorytmu mam tylko problemem jest wlasnie stworzenie takiej tablicy charow.

1 odpowiedź

0 głosów
odpowiedź 30 stycznia 2022 przez adrian17 Ekspert (344,100 p.)

Niezbyt rozumiem problem - to jest zwykły string, nie?

std::string tekst;
std::cin >> tekst;

 

komentarz 30 stycznia 2022 przez dubajstan Nowicjusz (160 p.)
string z tego co wiem nie przechowa tak duzej ilosci znakow
komentarz 30 stycznia 2022 przez adrian17 Ekspert (344,100 p.)
Jasne że przechowa, "nawet milion" to tylko megabajt :)
komentarz 30 stycznia 2022 przez dubajstan Nowicjusz (160 p.)
na wyjsciu po wpisaniu jakos 300 tys znakow 's' wyswietla sie wynik 4096
komentarz 30 stycznia 2022 przez dubajstan Nowicjusz (160 p.)
#include <iostream>
#include <cstdlib>

using namespace std;

int ciag(int a, int b, string slowo)
{
	int pierwsza = a - 1;
	while (slowo[a] == slowo[pierwsza] && slowo[a]!='\0')
	{
		a++;
	}
	while (slowo[b - 1] == slowo[pierwsza] && b!=0)
	{
		b--;
		if (b == 0) break;
	}
	return a - b;
}

int main()
{
	ios::sync_with_stdio(0);
	
	string slowo;
	unsigned int testy, poz;

	cin >> slowo;
	cin >> testy;

	while (testy)
	{
		cin >> poz;
		cout << ciag(poz, poz, slowo) << ' ';
		testy--;
	}
	return 0;
}

 

komentarz 30 stycznia 2022 przez adrian17 Ekspert (344,100 p.)
A dla jakiego wejścia pokazuje 4096?

Na moją intuicję to masz po prostu błąd gdzieś w logice.
komentarz 30 stycznia 2022 przez dubajstan Nowicjusz (160 p.)
wpisuje na wejscie jedynie znaki 's' wiec dla jakiegokolwiek wejscia powinno wypisac liczbe znakow wpisanych

Nie mam pojecia czy jest blad w logice, poniewaz dla innych testow wyswietla sie normalny wynik. Sprawdzalem to na stronce, na ktorej bylo zadanie. Sa tam podane limity dlugosci tego stringa, dla mniejszego niz 1000 znakow wszystko bylo poprawnie
komentarz 30 stycznia 2022 przez adrian17 Ekspert (344,100 p.)

wiec dla jakiegokolwiek wejscia powinno wypisac liczbe znakow wpisanych

No nie, jeśli na przykład Twoim wejściowym indeksem jest "0" to od razu program wychodzi poza tablicę bo obsługa indeksów jest źle napisana.

komentarz 30 stycznia 2022 przez dubajstan Nowicjusz (160 p.)
napisalem w pytaniu blad, poniewaz na wejsciu uzytkownik podaje numer komorki, ale numeracja zaczyna sie od 1, a nie od 0 tak jak to odczytuje program. Czyli np. dla sbbbs, jesli wpiszemy 1 to program wypisze 1, poniewaz ciag tych samych znakow, w ktorym znajduje sie znak o numerze 1 zawiera tylko jeden znak

Podobne pytania

0 głosów
2 odpowiedzi 267 wizyt
pytanie zadane 13 maja 2019 w C i C++ przez antek97 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 267 wizyt
0 głosów
1 odpowiedź 1,519 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...