fbpx

Problema #2105 – Moretime – Rezolvari PBInfo

de Mihai-Alexandru

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şi 2 clienţi premium pentru colectarea fondurilor de siguranţă@
    clienţii cu conturile 2902 şi 44 pot fi aleşi pentru că suma fondurilor lor (200+100=300) poate fi împărţită în mod egal celor 3 clienţi premium (fiecare ar primi 100).
#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

S-ar putea sa iti placa