Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Achizitie SUV, buget 17k euro

Gps traker pentru animale

Aplicatii terte pentru IPTV, OTT,...

Drept trecere cu “carulR...
 Sunt noile generatii care se nasc...

Butuc pedalier

Niste intrebari despre apartamente

Comentarii amuzante pe Youtube
 Nu iese laptopul din sleep mode.

Facerea de bine - ce aștepta...

Probleme drum servitute

Se pot monta placi de gresie de 1...
 Card de debit virtual emis de India

Diferenta ATS generator si PV

La multi ani @Lotusisrael!

Declarație primar
 

Reactivi OJI 2004, Clasa a IX-a

- - - - -
  • Please log in to reply
4 replies to this topic

#1
Quaintej

Quaintej

    Junior Member

  • Grup: Junior Members
  • Posts: 41
  • Înscris: 08.11.2015
Salut.
Am rezolvat problema Reactivi de la OJI 2004, Clasa a IX-a initial de 70 de puncte,  apoi m-am uitat peste niste indicatii de rezolvare si am vazut sugestia de a ordona intervalele de temperatura crescator dupa temperatura minima , dupa ce se face citirea.  Am facut acest lucru, am primit 100 de puncte dar totusi nu am inteles cu ce ajuta ordonarea aceasta. Imi poate explica cineva?
Ideea mea era de a plasa initial fiecare reactiv intr-un frigider, apoi pentru fiecare reactiv sa caut alti reactivi astfel incat intersectia intervalelor lor sa nu fie vida. Daca gasesc, "mut" reactivul gasit in frigider la primul, si continui cautarea, ajustand temperatura frigiderului in care le-am plasat, si marchez faptul ca in frigiderul reactivului gasit nu se mai afla nimic, deci in continuare nu mai avem treaba cu el.
aici este sursa:

#include <fstream>
using namespace std;
int n,a[8002],i,j,b[8002],fr[8002],nr;
ifstream fin("reactivi.in");
ofstream fout("reactivi.out");
int main()
{ fin>>n;
for(i=1; i<=n; i++)
  {  fin>>a[i];
	 fin>>b[i];
	 fr[i]=1; // fr este vectorul in care tin evidenta a cate lucruri avem in fiecare frigider
  }
for(i=1; i<n; i++)
  for(j=i+1; j<=n; j++)//sortez vectorul in functie de temp minima
	 if( a[i] > a[j] )
	   {   swap( a[i] , a[j] );
		   swap( b[i] , b[j] );
	   }
//luam cate 2 intervale
for(i=1; i<=n-1; i++)
  for(j=i+1; j<=n; j++)
	 if( fr[i]!=0 && fr[j]!=0 )  // sa nu fi pus deja substanta in alt frigider
		if( b[i]>=a[j] && b[j]>=a[i] ) //deci incap in acelasi frigider
		   {  if( a[i] < a[j] ) a[i]=a[j];  //ajustez temperatura
			  if( b[i] > b[j] ) b[i]=b[j];  
			  fr[i]++; //inca un lucru in frigiderul i
			  fr[j]=0; //am golit frigiderul j si am pus continutul in i
		   }// le-am pus in frigider, nu mai avem treaba cu ele
for(i=1; i<=n; i++)
  if( fr[i]>=1 ) // daca avem ceva in acel frigider
   nr++;
fout<<nr;
return 0;
}

Imi cer scuze in caz ca va deranjeaza comentariile de pe anumite linii ale sursei.
Multumesc anticipat.

Edited by dani.user, 25 September 2016 - 19:41.
[code]


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,254
  • Înscris: 24.02.2007
Care-i cerinta?

Intr-un vector sortat e mai usor sa gasesti un element decat intr-unul nesortat.

#3
Quaintej

Quaintej

    Junior Member

  • Grup: Junior Members
  • Posts: 41
  • Înscris: 08.11.2015
link: http://www.pbinfo.ro...robleme&id=1373
sau
Enunt
Într-un laborator de analize chimice se utilizează N reactivi. Se ştie că, pentru a evita accidentele sau deprecierea reactivilor, aceştia trebuie să fie stocaţi în condiţii de mediu speciale. Mai exact, pentru fiecare reactiv x, se precizează intervalul de temperatură [minx, maxx] în care trebuie să se încadreze temperatura de stocare a acestuia.
Reactivii vor fi plasaţi în frigidere. Orice frigider are un dispozitiv cu ajutorul căruia putem stabili temperatura (constantă) care va fi in interiorul acelui frigider (exprimată într-un număr întreg de grade Celsius).
Cerința
Scrieţi un program care să determine numărul minim de frigidere necesare pentru stocarea reactivilor chimici.
Date de intrare
Fişierul de intrare reactivi.in conţine:
pe prima linie numărul natural N, care reprezintă numărul de reactivi;
pe fiecare dintre următoarele N linii se află min max (două numere întregi separate printr-un spaţiu); numerele de pe linia x+1 reprezintă temperatura minimă, respectiv temperatura maximă de stocare a reactivului x.
Date de ieșire
Fişierul de ieşire reactivi.out va conţine o singură linie pe care este scris numărul minim de frigidere necesar.
Restricții și precizări
1 <= N <= 8000
-100 <= minx <= maxx <= 100 (numere întregi, reprezentând grade Celsius), pentru orice x de la 1 la N
un frigider poate conţine un număr nelimitat de reactivi

#4
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Ordonezi de la mic la mare deoarece si iterarea o faci de la stanga la dreapta pe axa numerelor (for(i=0,...i++).

Poti ordona si invers, daca si iterarea o faci invers.

#5
Quaintej

Quaintej

    Junior Member

  • Grup: Junior Members
  • Posts: 41
  • Înscris: 08.11.2015
Multumesc pentru explicații.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate