1. b
2. c
3. d
4. c
5. a

6a. 3
6b. 231 239  //fiecare valoare cate 3 puncte
6c.
#include <iostream>
using namespace std;
int main()
{
	int a, b, m, c = 0, s, x;
	cin >> a >> b >> m;
	while (a <= b)
	{
		x = a;
		s = 0;
		while (x > 0)
		{
			s += x % 10;
			x /= 10;
		}
		if (s == m)
			c++;
		a++;
	}
	cout << c;
	return 0;
}

6d.
citeste a,b,m
c ← 0
┌pentru i←a,b executa
│x ← i
│s ← 0
│┌cât timp x>0 execută
││ s ← s + x%10
││ x ← [x/10]
│└■
│┌dacă s = m atunci
││c ← c+1
│└■
└■
scrie c

7. 6 12  //3 puncte pentru fiecare valoare corecta

8. if (i+j == 8 or i+j == 7 or i+j == 9)
             a[i][j] = 1;
          else
            a[i][j] = 2;
//barem: 3 puncte pentru atribuirea valorii 1 tuturor elementelor, 3 puncte pentru atribuirea valorii 2 tuturor elementelor

9.
O metoda simpla este sa verificam daca 2^n - 1 este numar prim, caz in care expresia reprezinta un numar prim:
bool p(int n)
{
	auto doilan = [](int n)	//functor care calculeaza 2 la puterea n, se putea face si ca functie separata definita inaintea functiei p
	{
		int rez = 1;
		for (int i = 1; i <= n; i++)
			rez = rez * 2;
		return rez;
	};
	auto prim = [](int x)  //functor care returneaza 1 daca x e numar prim si 0 in caz contrar, se putea face si ca functie separata definita inaintea functiei p
	{
		for (int i = 3; i <= x / 2; i+=2)
			if (x%i == 0)
				return 0;
		return 1;
	};
	int p2 = doilan(n);
	bool verif = prim(p2-1);
	if (verif == 1) return 1;
	else return 0;
}
Exista si o a doua metoda: sa calculam expresia E = 2^(n-1) x (2^n - 1), sa calculam suma divizorilor numarui E si sa verificam daca expresia e numar perfect conform definitiei.
Aceasta metoda trebuie tratata cu atentie pentru a obtine punctaj maxim: pentru calculul lui E trebuie folosit tipul long long int iar suma divizorilor trebuie derminata printr-un 
algoritm cu complexitate O(radical(E))

10.
Algoritmul de rezolvare este in principiu simplu: cititm datele de intrare si retinem fiecare cuvant. Apoi parcurgem sirul cuvintelor si verificam daca fiecare dintre ele este n-cuvant.
Aceasta verificare se poate face in numeroase moduri:
- parcurgem cuvantul si numaram fiecare litera care nu apare printre literele deja parcurse (aflate "la stanga" in cuvant). Aceasta fie cu 2 for-uri, fie sortand literele cuvantului
si apoi cu un singur for
- numaram fiecare litera de la 'a' la 'z' daca apare in cuvant folosind o functie de cautare a unui caracter intr-un sir
- introducem literele cuvantului intr-un set (o variabila care simuleaza o multime) si care are proprietatea ca nu retine dubluri. Dimensiunea finala a set-ului este egala cu numarul
de litere din care este construit cuvantul
- un vector caracteristic unde marcam aparitiile literelor cuvantului.
Este indicat ca aceasta verificare sa fie facuta cu o functie separata definita inainte de main.

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

bool verifica(string cuv, int n)
{
	sort(cuv.begin(), cuv.end());
	int ct = 1;
	for (int i = 1; i < cuv.size(); i++)
		if (cuv[i] != cuv[i - 1])
			ct++;
	return ct == n;
}

string cuvinte[30];

int main()
{
	int m, n, rez=0;
	int lmax = 0;
	cin >> m;
	for (int i = 0; i < m; i++)
		cin >> cuvinte[i];
	cin >> n;
	for (int i = 0; i < m; i++)
		if (verifica(cuvinte[i], n))
			if (cuvinte[i].size() > lmax)
				lmax = cuvinte[i].size();
	if (lmax == 0)
		cout << "nu exista" << endl;
	else
		cout << lmax << endl;
	return 0;
}

1. Rezolvarea problemei se bazeaza pe algoritmul "standard" de determinare a lungimii unei secvente de valori succesive aflate in pozitii alaturate dintr-un sir de valori care au o anumita proprietate.
Problema se poate rezolva intr-un numar de pasi de ordinul O(n) unde n este numarul de valori din fisier si folosind doar cateva variabile simple.

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

int main()
{
	ifstream in("meteo.in");
	int pd, pn;
	in >> pn >> pd;
	int lcrt = 0, ct = 0, tdiurn, tnocturn, lmax = 0;
	while (in >> tnocturn >> tdiurn)
	{
		if (tnocturn >= pn and tdiurn > pd)
			lcrt++;
		else
		{
			if (lcrt >= 3)
			{
				ct++;
				if (lcrt > lmax)
					lmax = lcrt;
			}
			lcrt = 0;
		}
	}

	if (lcrt >= 3)	//verifica o posibila secventa cu care se termina fisierul si car enu este luata in calcul in bucla while
	{
		ct++;
		if (lcrt > lmax)
			lmax = lcrt;
	}
	if (lmax == 0)
		cout << "nu exista";
	else
		cout << ct <<" "<<lmax<< endl;
	
	return 0;
}
