Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- /*
- Programozási alapismeretek 2. évfolyam ZH 2016. január
- 1. oldal
- Eső
- Az elmúlt N hétben minden nap megmértük a lehullott csapadék mennyiségét, milliméterben.
- Írj programot, amely megadja az alábbiakat
- minden hétre a lehullott csapadék mennyiségét;
- a legcsapadékosabb hetet;
- azon heteket, amikor a csapadékmennyiség a héten belül folyamatosan nőtt;
- azon N/2 hetes időszakot, amikor a legkevesebb napon esett az eső;
- a leghosszabb időszakot, amikor minden héten legfeljebb 10 mm eső volt!
- Bemenet
- A standard bemenet első sora a hetek számát tartalmazza (2≤N≤1000). A következő N
- sorban egy-egy hét 7 csapadékmennyisége található (0≤Ci,j≤1000).
- Kimenet
- A standard kimenetre 5 sort kell írni! Az 1. sor N száma az N hét csapadék mennyisége
- legyen! A második sorba a legcsapadékosabb hét sorszámát kell kiírni (több megoldás esetén a
- legkisebb sorszámút)! A harmadik sorba azon hetek M számát, majd az M hét sorszámát kell kiírni,
- növekvő sorrendben, amelyeken belül a csapadékmennyiség folyamatosan nőtt! A negyedik sorba
- azon N/2 hetes időszak első hete sorszámát kell írni, ami alatt a legkevesebb napon esett az eső
- (több megoldás esetén a legkisebb sorszámút)! Az ötödik sorba a leghosszabb időszak első és
- utolsó hete sorszáma kerüljön, amikor minden héten legfeljebb 10 mm eső volt (több megoldás
- esetén a legkisebb sorszámú)! Ha nincs ilyen hét, akkor az egyetlen 0 számot kell kiírni.
- Példa
- Bemenet Kimenet
- 6 140 2 4 21 9 0
- 5 10 15 20 25 30 35 1
- 0 2 0 0 0 0 0 2 1 4
- 0 0 0 1 0 3 0 2
- 0 1 2 3 4 5 6 2 3
- 5 1 0 0 2 1 0
- 0 0 0 0 0 0 0
- Korlátok
- Időlimit: 0.1 mp.
- Memórialimit: 32 MiB
- Ha a részfeladatok valamelyikét nem tudod megoldani, akkor az eredménye helyett egy üres sort
- írj ki!
- Értékelés
- Értékelés 10 teszt-adatfájl alapján:
- Összpont: 10*(2+2+2+3+3)=10*12=120 pont
- Alsópont: 40 60 80 100
- Jegy: 2 3 4 5
- */
- int main()
- {
- int N;
- const int MAX_N = 100;
- cin >> N;
- int CSM[MAX_N][7];// Csapadék Mátrix
- int heti_csapadek[MAX_N];
- bool novekvo_hetek[MAX_N];
- // Beolvasás
- for (int i = 0; i < N; ++i)
- {
- for (int j = 0; j < 7; ++j)
- {
- cin >> CSM[i][j];
- }
- }
- for (int i = 0; i < N; ++i) {// 1. és 3. feladatrész
- int sum_het = 0;
- bool novekszik = true;// TFH Növekszik
- for (int j = 0; j < 6; ++j) {
- if (CSM[i][j] >= CSM[i][j + 1])// Próbáljuk bebizonyítani az ellenkezőjét
- novekszik = false;
- }
- novekvo_hetek[i] = novekszik;
- for (int j = 0; j < 7; ++j) {
- sum_het += CSM[i][j];
- }
- heti_csapadek[i] = sum_het;
- }
- for (int i = 0; i < N; ++i) {
- cout << heti_csapadek[i] << " ";
- }
- cout << endl;
- int max_csapadek_idx = 0;// TFH nincs csapadékosabb hét az elsőnél
- for (int i = 1; i < N; ++i)// Max. hely keresés
- {
- if (heti_csapadek[i] > heti_csapadek[max_csapadek_idx])
- max_csapadek_idx = i;
- }
- cout << max_csapadek_idx + 1 << endl;
- int darab = 0;// Növekvő hetek megszámolása
- for (int i = 0; i < N; ++i) {
- if (novekvo_hetek[i] == true)
- darab++;
- }
- cout << darab << " ";
- for (int i = 0; i < N; ++i) {
- if (novekvo_hetek[i] == true)
- cout << i + 1 << " ";
- }
- cout << endl;
- int max_csapadek_mentes_darab = 0;// A legtöbb csapadékmentes nap darabszáma az eddig legjobb 2 hetes periódusban
- int max_csapadek_mentes_darab_index;// Ezen periódus első hetének indexe
- for (int i = 0; i < N - 1; ++i) {
- int nulla_darab = 0;
- for (int j = 0; j < 7; ++j) {// Napok viszgálata az aktuális és a következő hétre
- if (CSM[i][j] == 0)
- nulla_darab++;
- if (CSM[i + 1][j] == 0)
- nulla_darab++;
- }
- if (nulla_darab > max_csapadek_mentes_darab) {
- max_csapadek_mentes_darab = nulla_darab;
- max_csapadek_mentes_darab_index = i;
- }
- }
- cout << max_csapadek_mentes_darab_index + 1 << endl;
- int kezdet = -1;// Leghosszabb alacsony csapadékú sorozat kezdete. -1 Jelzi, hogy még nem volt ilyen sorozat
- int veg = -1;// vége
- int act_kezdet = -1, act_veg;// Aktuális sorozat kezdete és vége. -1 jelzi, hogy nincs megkezdett sorozat
- for (int i = 0; i < N; ++i)
- {
- if (heti_csapadek[i] <= 10) {
- if (act_kezdet == -1)// Új sorozatot kezdünk, ha nem voltunk benne
- act_kezdet = i;
- }
- else if (act_kezdet != -1) {// Sok a csapadék, ha sorozatban voltunk, lezárjuk
- act_veg = i - 1;
- if (act_veg - act_kezdet > veg - kezdet || kezdet == -1) {// Ha hosszabb ez a sor, mint az eddigi leghosszabb VAGY nem volt még korábbi mentett sorozat, akkor elmentjük
- veg = act_veg;
- kezdet = act_kezdet;
- }
- act_kezdet = -1;
- }
- }
- if (act_kezdet != -1) {// Sorozatban voltunk az utolsó héten, lezárjuk
- act_veg = N - 1;
- if (act_veg - act_kezdet > veg - kezdet || kezdet == -1) {
- veg = act_veg;
- kezdet = act_kezdet;
- }
- }
- cout << kezdet + 1 << " " << veg + 1 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement