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
3
clienţi premium
pot fi aleşi2
clienţi premium pentru colectarea fondurilor de siguranţă@
clienţii cu conturile2902
şi44
pot fi aleşi pentru că suma fondurilor lor(200+100=300)
poate fi împărţită în mod egal celor3
clienţ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; }