fbpx

Problema #1079 – Comp – Rezolvari PBInfo

de Mihai-Alexandru

Locuitorii planetei Eudora folosesc o reprezentare mai ciudată a numerelor naturale, astfel că orice număr natural va fi scris notând câte mii, sute, zeci, respectiv unităţi conţine acesta. De exemplu, numărul 3207 se poate reprezenta în mai multe moduri echivalente: 3m2s7u (3 mii 2 sute şi 7 unităţi), 32s0z7u (32 sute 0 zeci şi 7 unităţi), 32s7u, 3207u, etc.

Pentru a compara două numere naturale, eudorienii folosesc semnele < şi >, acestea având semnificaţia cunoscută şi pe Terra, iar pentru a calcula suma a două numere naturale utilizează semnul +.

Pentru a testa abilităţile pământenilor în privinţa lucrului cu numere naturale, eudorienii au trimis pe Terra un fişier text ce conţine N linii, fiecare linie fiind o comparaţie de forma:

expresie1>expresie2

Exemplu

comp.in

2
120u+7z13u>2s13u
1m11s+2z+1u<2m1s2z5u+0u

comp.out

1
0
1

Explicație

  • O comparaţie foloseşte semnul <.
  • Prima comparaţie e falsă (203>213).
  • A doua comparaţie e adevărată (2121<2125).
#include <bits/stdc++.h>

using namespace std;

ifstream cin("comp.in");
ofstream cout("comp.out");

int sum[3];

bool cif(char ch)
{
    return ch >= '0' && ch <= '9';
}

int main()
{
    char s[255];
    int n;
    cin >> n;
    int ind=0;
    int b[1001] , p = 0;
    for(int k = 1 ; k <= n ; ++k)
    {
        cin >> s;
        int i = 0;
        bool mm = true;
        int nr = 0 , cnt = 1;
        sum[1]=0 , sum[2]=0;
        while(s[i])
        {
            while(cif(s[i]))
            {
                nr = nr * 10 + s[i] - '0';
                i++;
            }
            if(s[i]=='u')
                sum[cnt] += nr , nr = 0;
            if(s[i]=='z')
                sum[cnt] += nr * 10 , nr = 0;
            if(s[i]=='s')
                sum[cnt] += nr * 100 , nr = 0;
            if(s[i]=='m')
                sum[cnt] += nr * 1000 , nr = 0;
            if(s[i]=='<')
                mm = true , cnt++;
            if(s[i]=='>')
                mm = false , cnt++;
            i++;
            nr=0;
        }
        if(mm)
        {
            if(sum[1] < sum[2])
                b[p]=1 , p++;
            else
                b[p]=0 , p++;
        }
        else
        {
            if(sum[1] > sum[2])
                b[p]=1 , p++;
            else
                b[p]=0 , p++;
        }
        if(mm)
            ind++;

    }
    cout << ind << endl;
    for(int i = 0 ; i < p ; ++i)
        cout << b[i] << endl;
    return 0;
}
Comentarii

S-ar putea sa iti placa