286
La banca Moretime, moneda este Time-ul. Cei n clienţi ai băncii au conturi identificate prin valori naturale nenule, distincte două câte două. La deschiderea contului, fiecare client a depus un fond de siguranţă reprezentat printr-un număr natural nenul (cantitatea de Time aferentă contului, ce poate fi folosită de bancă, pentru urgenţe majore). Un client al băncii este considerat premium dacă numărul său de cont începe şi se termină cu aceeaşi cifră nenulă.
Exemplu
moretime.in
6 112 100 217 50 1231 200 3000 500 2902 200 44 100
moretime.out
3 2 2902 44
Explicație
- sunt
3clienţi premium
pot fi aleşi2clienţi premium pentru colectarea fondurilor de siguranţă@
clienţii cu conturile2902şi44pot fi aleşi pentru că suma fondurilor lor(200+100=300)poate fi împărţită în mod egal celor3clienţi premium (fiecare ar primi100).
#include <bits/stdc++.h>
using namespace std;
ifstream cin("moretime.in");
ofstream cout("moretime.out");
struct an
{
int i , val;
}a[10001];
struct cutie
{
int cont , fond;
}b[10001];
int corect(int n)
{
int uc = n % 10;
while(n > 9) n /= 10;
if(n == uc) return 1;
else return 0;
}
int suma[10001] , rest[10001];
int main()
{
int n , cnt = 0 , inou , jnou;
cin >> n;
for(int i = 1; i <= n ; i++)
{
cin >> a[i].i >> a[i].val;
if(corect(a[i].i))
{
cnt++;
b[cnt].cont = a[i].i;
b[cnt].fond = a[i].val;
}
}
cout << cnt << '\n';
for(int i = 1 ; i <= cnt ; i++)
{
suma[i] = suma[i-1] + b[i].fond;
if(suma[i] % cnt == 0)
{
cout << i << '\n';
for(int j = 1 ; j <= i ; j++) cout << b[j].cont << ' ';
return 0;
}
}
for(int i = 1 ; i <= cnt ; i++)
for(int j = i + 1 ; j <= cnt ; j++)
if(suma[i] % cnt == suma[j] % cnt)
{
inou = i;
jnou = j;
}
cout << jnou - inou << '\n';
for(int i = inou +1 ; i <= jnou ; i++)
cout << b[i].cont << ' ';
//cout << inou << " " << jnou;
}
Comentarii