Friday, April 24, 2015

UVa - 499 - What's The Frequency, Kenneth

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;

int main(){
    string text;
    int cnt[125], mx;
    while(getline(cin, text)){
        int sz = text.size();
        memset(cnt, 0, sizeof(cnt));
        for(int i = 0; i < sz; i++)
            if((text[i] >= 'a' && text[i] <= 'z') || (text[i] >= 'A' && text[i] <= 'Z'))cnt[text[i]]++;
        mx = cnt[0];
        for(int i = 0; i < 125; i++)if(mx < cnt[i])mx = cnt[i];
        for(int i = 0; i < 125; i++)if(mx == cnt[i])printf("%c", i);
        cout << " " << mx << endl;
    }
    return 0;
}

UVa - 484 - The Department of Redundancy

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main(){
    int numbers;
    map <int, int> carry;
    vector <int> sequence;
    while(cin >> numbers){
        if(carry.count(numbers) == 0)carry[numbers] = 1, sequence.push_back(numbers);
        else carry[numbers] += 1;
    }
    int l = sequence.size();
    for(int i = 0; i < l; i++)cout << sequence[i] << " " << carry[sequence[i]] << endl;
    return 0;
}

UVa - 459 - Graph Connectivity

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

int par[33];
int cnt;

int find_set(int r){
if(par[r] == r)return r;
return par[r] = find_set(par[r]);
}

void merge_set(int x, int y){
int u = find_set(x);
int v = find_set(y);
if(u != v)par[u] = v, cnt--;
}

int main(){
    int t, m, n, blank = 0;
    char s;
    string node;
    cin >> t;
    while(t--){
        if(blank)cout << endl;
        cin >> s;
        cnt = s-64;
        for(int i = 1; i <= s-64; i++)par[i] = i;///create set
        cin.ignore();
        while(getline(cin, node)){
            if(node == "")break;
            m = node[0]-64;
            n = node[1]-64;
            merge_set(m, n);
        }
        cout << cnt << endl;
        blank = 1;
    }
    return 0;
}

UVa - 409 - Excuses, Excuses!

#include <bits/stdc++.h>
using namespace std;

struct data{
    string str_key;
}ar[100];

int main(){
    int cnt, ans, k, l, cs = 0, bl = 0;
    string keyword, sentence, temp, new_key;
    vector <int> mx;
    map <string, int> F, out;
    while(cin >> l >> k){
        F.clear(), cnt = 0, mx.clear(), out.clear(), temp.clear(), sentence.clear(), keyword.clear();
        for(int i = 0; i < 100; i++)ar[i].str_key.clear();
        int mxx = 0;
        for(int i = 0; i < l; i++){
            cin >> keyword;
            for(int i = 0; i < keyword.size(); i++){
                if(keyword[i] >= 'a' && keyword[i] <= 'z')new_key.push_back(keyword[i]-32);
                if(keyword[i] >= 'A' && keyword[i] <= 'Z')new_key.push_back(keyword[i]);
            }
            F[new_key] = 1;
            new_key.clear();
        }
        cin.ignore();
        for(int i = 0; i < k; i++){
            getline(cin, sentence);
            ar[i].str_key = sentence;
            int sz = sentence.size();
            for(int i = 0; i < sz; i++){
                if(i == sz-1 || (sentence[i] >= 32 && sentence[i] <= 64) || (sentence[i] >= '0' && sentence[i] <= '9')){
                    if(sentence[i] >= 'a' && sentence[i] <= 'z')temp.push_back(sentence[i]-32);
                    if(sentence[i] >= 'A' && sentence[i] <= 'Z')temp.push_back(sentence[i]);
                    if(F[temp])cnt++;
                    temp.clear();
                }
                else{
                    if(sentence[i] >= 'a' && sentence[i] <= 'z')temp.push_back(sentence[i]-32);
                    if(sentence[i] >= 'A' && sentence[i] <= 'Z')temp.push_back(sentence[i]);
                }
            }
            out[sentence] = cnt;
            mx.push_back(cnt);
            cnt = 0;
        }
        int L = mx.size();
        for(int i = 0; i < L; i++)mxx = max(mxx, mx[i]);
        cout << "Excuse Set #" << ++cs << endl;
        for(int i = 0; i < k; i++){
            if(out[ar[i].str_key] == mxx)cout << ar[i].str_key << endl;
        }
        cout << endl;
    }
    return 0;
}

UVa - 383 - Shipping Routes

#include <bits/stdc++.h>
#define mem(n) memset(n, 0, sizeof(n))
using namespace std;

vector <int> store[33];
int vis[33], level[33];

void BFS(int src, int dest, int tot){
    queue <int> Q;
    Q.push(src);
    vis[src] = 1;
    while(!Q.empty()){
        int u = Q.front();
        Q.pop();
        int sz = store[u].size();
        for(int i = 0; i < sz; i++){
            int v = store[u][i];
            if(!vis[v]){
                vis[v] = 1;
                Q.push(v);
                level[v] = level[u]+1;
            }
        }
    }
    if(!level[dest])cout << "NO SHIPMENT POSSIBLE" << endl;
    else cout << "$" << level[dest]*tot << endl;
}

int main(){
    int node, edge, shipment;
    int res, ret, tmp, test, cs = 0;
    string start, dest, nde;
    map <string, int> M;
    cin >> test;
    puts("SHIPPING ROUTES OUTPUT");
    puts("");
    while(test--){
        cin >> node >> edge >> shipment;
        for(int i = 1; i <= node; i++)cin >> nde, M[nde] = i;
        for(int i = 1; i <= edge; i++){
            cin >> start >> dest;
            store[M[start]].push_back(M[dest]);
            store[M[dest]].push_back(M[start]);
        }
        cout << "DATA SET  " << ++cs << endl << endl;
        for(int i = 1; i <= shipment; i++){
            mem(level), mem(vis);
            cin >> tmp >> start >> dest;
            BFS(M[start], M[dest], tmp*100);
        }
        M.clear();
        for(int i = 1; i <= node; i++)store[i].clear();
        puts("");
    }
    puts("END OF OUTPUT");
    return 0;
}

UVa - 264 - Count on Cantor

#include <bits/stdc++.h>
using namespace std;

int main(){
    long long term, x, y = 0, p, q, temp;
    while(cin >> term){
        x = (sqrt(1+8*term)-1)/2;
        temp = (x*(x+1))/2;
        if(temp == term){
            if(x%2)cout << "TERM " << term << " IS 1/" << x << endl;
            else cout << "TERM " << term << " IS " << x << "/1" << endl;
            continue;
        }
        x += 1;
        y = (x*(x+1))/2;
        if(x%2){
            p = 1 + abs(y-term);
            q = x - abs(y-term);
        }
        else{
            p = x - abs(y-term);
            q = 1 + abs(y-term);
        }
        cout << "TERM " << term << " IS " << p << "/" << q << endl;
    }
    return 0;
}

UVa - 325 - Identifying Legal Pascal Real Constants

#include <bits/stdc++.h>
using namespace std;

int main(){
    int flag;
    string input, ans;
    while(getline(cin, input)){
        if(input == "*")break;
        int szz = input.size(), dot = 0, dot_f = 0, exp = 0, exp_f = 0, invalid = 0, sp = 0, an = 0, sign = 0;
        for(int i = 0; i < szz; i++){
            if(input[i] == 32 && !sp)continue;
            else{
                ans.push_back(input[i]);
                sp = 1;
            }
        }
        int sz1 = ans.size();
        for(int i = sz1-1; i >= 0; i--){
            if(ans[i] == 32)an++;
            else break;
        }
        for(int i = 0; i < an; i++)ans.erase(ans.size()-1);
        int sz = ans.size();
        for(int i = 0; i < sz; i++){
            if((ans[i] >= '0' && ans[i] <= '9') || ans[i] == 'e' || ans[i] == 'E' || ans[i] == '.' || ans[i] == '+' || ans[i] == '-'){
                if(ans[i] == '.'){
                    if(i == 0)invalid = 1;
                    if(exp)invalid = 1;
                    dot += 1;
                    if((i != sz-1) && (ans[i+1] >= 48 && ans[i+1] <= 57))dot_f = 1;
                }
                if(ans[i] == 'e' || ans[i] == 'E'){
                    if(i == 0)invalid = 1;
                    exp += 1;
                    if((i != sz-1) && (ans[i+1] >= '0' && ans[i+1] <= '9'))exp_f = 1;
                    else if(ans[i+1] == '-' || ans[i+1] == '+'){
                        if((i+1 != sz-1) && (ans[i+2] >= '0' && ans[i+2] <= '9'))exp_f = 1;
                    }
                }
                if(ans[i] == '-' || ans[i] == '+'){
                    if(i == 0 || ans[i-1] == 'e' || ans[i-1] == 'E')sign = 0;
                    else sign = 1;
                }
            }
            else invalid = 1;
        }
        if(invalid || sign)cout << ans << " is illegal." << endl;
        else if(dot == 1 && dot_f == 1 && exp == 1 && exp_f == 1)cout << ans << " is legal." << endl;
        else if(dot == 1 && dot_f == 1 && exp == 0 && exp_f == 0)cout << ans << " is legal." << endl;
        else if(dot == 0 && dot_f == 0 && exp == 1 && exp_f == 1)cout << ans << " is legal." << endl;
        else cout << ans << " is illegal." << endl;
        ans.clear();
    }
    return 0;
}