Cod sursa(job #963717)

Utilizator razvan.popaPopa Razvan razvan.popa Data 18 iunie 2013 17:09:16
Problema Aria Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.79 kb
#include<cstdio>
#include<cstring>
#include<algorithm>
#define FOR(i,a,b)\
   for(int i = (int)a; i <= (int)b; ++i)
#define infile "monede.in"
#define outfile "monede.out"
#define lMax 55
using namespace std;

struct cantarire{
    char st[lMax], dr[lMax];
    bool isEqual;

    bool operator < (const cantarire &that)const{
        return isEqual < that.isEqual;
    }
} C[3];


bool isGood[12];

int  weight[12];

char SOL;


void read(){
    freopen(infile, "r", stdin);

    char s[lMax];

    FOR(i,0,2){
        scanf("%s %s ", C[i].st, C[i].dr);
        gets(s);

        if(!strcmp(s, "egal"))
            C[i].isEqual = true;
        else if(!strcmp(s, "sus"))
            swap(C[i].st, C[i].dr);
    }

    fclose(stdin);
}

bool isUnique(int letter){
    FOR(i,0,11)
        if(i != letter && weight[i] == weight[letter])
            return false;
    return true;
}

void solve(){
    sort(C, C + 3);

    FOR(i,0,2){
        if(C[i].isEqual){
            FOR(j, 0, strlen(C[i].st) - 1)
                isGood[C[i].st[j] - 'A'] = true;
            FOR(j, 0, strlen(C[i].dr) - 1)
                isGood[C[i].dr[j] - 'A'] = true;
            continue;
        }

        FOR(j, 0, strlen(C[i].st) - 1)
            weight[C[i].st[j] - 'A'] --;

        FOR(j, 0, strlen(C[i].dr) - 1)
            weight[C[i].dr[j] - 'A'] ++;
    }

    FOR(i,0,11){
        if(isGood[i])
            continue;

        if((isUnique(i) && abs(weight[i]) > abs(weight[SOL - 'A'])) || !SOL)
            SOL = 'A' + i;
    }
}

void print(){
    freopen(outfile, "w", stdout);

    printf("%c este moneda contrafacuta si este mai %s.\n", SOL, (weight[SOL - 'A'] < 0) ? "usoara" : "grea");

    fclose(stdout);
}

int main(){
    read();
    solve();
    print();

    return 0;
}