Thursday, November 27, 2014

UVa - 10959 - The Party, Part I

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#define L 1003
using namespace std;

int P, D;
vector <int> node[L];
int check1[L][L];
int visited[L][L], ans[L];

void BFS(){
    queue <int> tracking;
    tracking.push(0);
    ans[0] = 0;
    int Z;
    while(!tracking.empty()){
        int u = tracking.front();
        int sz = node[u].size();
        for(int i = 0; i < sz; i++){
            int v = node[u][i];
            if(!visited[u][v] && !visited[v][u]){
                visited[u][v] = 1, visited[v][u] = 1;
                tracking.push(v);
                if(ans[v] == -1)ans[v] = ans[u]+1;
            }
        }
        tracking.pop();
    }
}

int main(){
    int t, x, y;
    cin >> t;
    while(t--){
        memset(check1, 0, sizeof(check1));
        memset(visited, 0, sizeof(visited));
        memset(ans, -1, sizeof(ans));
        cin >> P >> D;
        for(int i = 1; i <= D; i++){
            cin >> x >> y;
            if(check1[x][y] || check1[y][x])continue;
            check1[x][y] = 1, check1[y][x] = 1;
            node[x].push_back(y);
            node[y].push_back(x);
        }
        BFS();
        for(int i = 1; i < P; i++)cout << ans[i] << endl;
        if(t)cout << endl;
        for(int i = 0; i < L; i++)node[i].clear();
    }
    return 0;
}

Sunday, September 28, 2014

UVa - 562 - Dividing coins

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

int dp[103][503], N, Mid;
vector <int> Coin;

int evaluate(int I, int C){
    int gain1, gain2;
    if(I == N)return 0;
    if(dp[I][C] != -1)return dp[I][C];
    if(C+Coin[I] <= Mid)gain1 = Coin[I] + evaluate(I+1, C+Coin[I]);
    else gain1 = 0;
    gain2 = evaluate(I+1, C);
    return dp[I][C] = max(gain1, gain2);
}

int main(){
    int T, C;
    cin >> T;
    while(T--){
        cin >> N;
        int Sum = 0;
        for(int i = 1; i <= N; i++)cin >> C, Sum += C, Coin.push_back(C);
        Mid = Sum / 2;
        memset(dp, -1, sizeof(dp));
        int ans = evaluate(0, 0);
        ans *= 2;
        int real = Sum - ans;
        cout << real << endl;
        Coin.clear();
    }
    return 0;
}

UVa - 414 - Machined Surfaces

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

int main(){
    int n;
    string input;
    while(cin >> n){
        if(n == 0)break;
        int cnt[n], mn = 25;
        memset(cnt, 0, sizeof(cnt));
        getchar();
        for(int i = 0; i < n; i++){
            getline(cin, input);
            for(int j = 0; j < 25; j++)if(input[j] == 32)cnt[i]++;
            mn = min(mn, cnt[i]);
        }
        int sum = 0, temp;
        for(int i = 0; i < n; i++)temp = (cnt[i]-mn), sum += temp;
        cout << sum << endl;
    }
    return 0;
}

UVa - 400 - Unix ls


  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7. int main(){
  8.     int n, mx, sz;
  9.     string file;
  10.     vector <string> srt;
  11.     while(cin >> n){
  12.         mx = 0;
  13.         for(int i = 1; i <= n; i++){
  14.             cin >> file, srt.push_back(file);
  15.             sz = file.size();
  16.             if(sz > mx)mx = sz;
  17.         }
  18.         sort(srt.begin(), srt.end());
  19.         int row, col, temp;
  20.         col = 62 / (mx+2);
  21.         row = ceil(n/(double)col);
  22.         for(int i = 1; i <= 60; i++)cout << "-";
  23.         cout << endl;
  24.         for(int i = 0; i < row; i++){
  25.             for(int k = i; k < n; k += row){
  26.                 cout << srt[k];
  27.                 for(int m = 1; m <= (mx-(srt[k].size()))+2; m++)cout << " ";
  28.             }
  29.             cout << endl;
  30.         }
  31.         srt.clear();
  32.     }
  33.     return 0;
  34. }

UVa - 357 - Let Me Count The Ways

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

int Coin[] = {1, 5, 10, 25, 50};
long long dp[7][30003];
long long N;

long long makeCoin(long long I, long long H){
    if(I >= 5){
        if(H == 0)return 1;
        else return 0;
    }
    if(dp[I][H] != -1)return dp[I][H];
    long long Way1 = 0, Way2 = 0;
    if(H-Coin[I] >= 0)Way1 = makeCoin(I, H-Coin[I]);
    Way2 = makeCoin(I+1, H);
    return dp[I][H] = Way1+Way2;
}

int main(){
    memset(dp, -1, sizeof(dp));
    while(cin >> N){
        long long ans = makeCoin(0, N);
        if(ans == 1)cout << "There is only 1 way to produce " << N << " cents change." << endl;
        else cout << "There are " << ans << " ways to produce " << N << " cents change." << endl;
    }
    return 0;
}

UVa - 294 - Divisors

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

int main(){
    int t, l, u, ans, mx, cnt;
    cin >> t;
    while(t--){
        cin >> l >> u;
        mx = -1;
        for(int i = l; i <= u; i++){
            cnt = 0;
            for(int j = 1; j <= sqrt(i); j++){
                if(i%j == 0){
                    cnt++;
                    if(i/j != j)cnt++;
                }
            }
            if(cnt > mx){
                mx = cnt;
                ans = i;
            }
        }
        cout << "Between " << l << " and " << u << ", " << ans << " has a maximum of " << mx << " divisors." << endl;
    }
    return 0;
}

UVa - 336 - A Node Too Far!

#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#define M 100003
using namespace std;

vector <int> node[M];
int cs = 1, mx, cnt;

void bfs(int src, int TTL, int cnt){
    queue <int> container;
    int visited[M] = {0}, ans = 1, power[M] = {0};
    visited[src] = 1;
    container.push(src);
    while(!container.empty()){
        int u = container.front();
        int sz = node[u].size();
        for(int i = 0; i < sz; i++){
            int v = node[u][i];
            if(!visited[v]){
                visited[v] = 1;
                power[v] = power[u]+1;
                if(power[v] <= TTL)ans++;
                container.push(v);
            }
        }
        container.pop();
    }
    cout << "Case " << cs << ": " << (cnt - ans) << " nodes not reachable from node " << src << " with TTL = " << TTL << "." << endl;
}

int main(){
    int N, E, x, y, src, TTL, m, num[M] = {0};
    while(cin >> N ){
        mx = 0, cnt = 0;
        if(!N)break;
        for(int i = 0; i < N; i++){
            cin >> x >> y,node[x].push_back(y), node[y].push_back(x);
            m = max(x, y);
            mx = max(mx, m);
        }
        for(int i = 0; i < mx+1; i++){
            int sz = node[i].size();
            if(sz > 0)cnt++;
        }
        while(cin >> src >> TTL){
            if(!src && !TTL)break;
            bfs(src, TTL, cnt);
            cs++;
        }
        for(int i = 0; i <= M; i++)node[i].clear();
    }
    return 0;
}

UVa - 146 - ID Codes


  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string>
  4. #include <cstring>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. int main(){
  9.     string code;
  10.     while(cin >> code){
  11.         if(code == "#")break;
  12.         if(next_permutation(code.begin(), code.end()))cout << code << endl;
  13.         else cout << "No Successor" << endl;
  14.     }
  15.     return 0;
  16. }

UVa - 119 - Greedy Gift Givers

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

int main(){
    int money, tk, x, n, sum[10], bl = 0;
    string name[10], temp;
    while(cin >> n){
        if(bl == 1)cout << endl;
        for(int i = 0; i < n; i++)cin >> name[i];
        memset(sum, 0, sizeof(sum));
        for(int k = 0; k < n; k++){
            cin >> temp >> money >> x;
            for(int z = 0; z < n; z++)if(x != 0 && (temp == name[z]))sum[z] -= ((money / x) * x);
            if(x != 0)tk = (money / x);
            for(int i = 0; i < x; i++){
                cin >> temp;
                for(int j = 0; j < n; j++)if(temp == name[j])sum[j] += tk;
            }
        }
        for(int i = 0; i < n; i++)cout << name[i] << " " << sum[i] << endl;bl = 1;
    }
    return 0;
}

UVa - 113 - Power of Cryptography

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

int main(){
    int n, mod, get, root, temp, m;
    vector <int> ans;
    string pran;
    while(cin >> n >> pran){
        get = n*n, mod = 0, m = 0;
        int l = pran.size();
        for(int i = 0; i < l; i++){
            temp = (mod * 10) + (pran[i]-48);
            mod = ((mod * 10) + (pran[i]-48)) % n;
            if(m == 1 && temp < get)ans.push_back(0);
            if(temp >= get){
                root = temp / get;ans.push_back(root);
                m = 1;
            }
        }
        for(int i = 0; i < ans.size(); i++)cout << ans[i];cout << endl;
        ans.clear();
    }
    return 0;
}

Monday, July 28, 2014

UVa - 424 - Integer Inquiry

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
#include <queue>
#include <vector>
using namespace std;

int main(){
    int hand, temp;
    string num, ans;
    stack <char> numbers, sum, after_sum;
    bool flag = true;
    while(getline(cin, num)){
        int l = num.size();
        for(int i = 0; i < l; i++)numbers.push(num[i]);
        hand = 0;
        while(!sum.empty() && !numbers.empty()){
            temp = (sum.top()-48)+ (numbers.top()-48) + hand;
            if(temp > 9)hand = temp/10, temp %= 10;
            else hand = 0;
            after_sum.push(temp+48);
            sum.pop(), numbers.pop();
            if(sum.empty() && numbers.empty() && hand > 0)after_sum.push(hand+48);
        }
        while(!sum.empty()){
            temp = hand + (sum.top()-48);
            if(temp > 9)hand = temp/10, temp %= 10;
            else hand = 0;
            after_sum.push(temp+48);
            sum.pop();
            if(sum.empty() && hand > 0)after_sum.push(hand+48);
        }
        while(!numbers.empty()){
            temp = hand + (numbers.top()-48);
            if(temp > 9)hand = temp/10, temp %= 10;
            else hand = 0;
            after_sum.push(temp+48);
            numbers.pop();
            if(numbers.empty() && hand > 0)after_sum.push(hand+48);
        }
        if(flag)sum = numbers;
        if(num == "0"){
            while(!after_sum.empty())ans.push_back(after_sum.top()), after_sum.pop();
            cout << ans << endl;
            break;
        }
        while(!after_sum.empty())sum.push(after_sum.top()), after_sum.pop();
        flag = false;
        ans.clear();
    }
    return 0;
}

Friday, July 25, 2014

UVa - 371 - Ackermann Functions

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    long long L, H, x, y, i, temp, cnt, ans, mx;
    while(cin >> x >> y){
        if(x == 0 && y == 0)break;
        L = min(x, y);
        H = max(x, y);
        mx = 0;
        if(L == 1)mx = 3, ans = 1;
        for(i = L; i <= H; i++){
            temp = i, cnt = 0;
            while(temp > 1){
                if(temp%2 == 0)temp /= 2, cnt++;
                else temp = (3*temp) + 1, cnt++;
            }
            if(cnt > mx)mx = cnt, ans = i;
        }
        cout << "Between " << L << " and " << H << ", " << ans << " generates the longest sequence of " << mx <<" values." << endl;
     }
    return 0;
}

UVa - 12554 - A Special "Happy Birthday" Song!!!

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

int main(){
    string song[4] = {"Happy", "birthday", "to", "you"};
    string name[101];
    int n;
    cin >> n;
    for(int i = 0; i < n; i++)cin >> name[i];
    int limit = (n / 16) + 1;
    limit *= 16;
    for(int i = 0; i < limit; i++)
        if(i % 16 == 11)cout << name[i%n] << ": Rujia" << endl;
        else cout << name[i%n] << ": " << song[i%4] << endl;

    return 0;
}

UVa - 458 - The Decoder

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

int main(){
    char sample[1000];
    while(scanf("%s", &sample) == 1){
        for(int i = 0; sample[i]; i++){
            printf("%c", sample[i] - 7);
        }
        cout << endl;
    }
    return 0;
}

UVa - 10494 - If We Were a Child Again

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
    long long mod_ans, mod, n, div, temp, m;
    string arbitrary;
    vector <long long>  div_ans;
    char sign;
    while(cin >> arbitrary >> sign >> n){
        int l = arbitrary.size();
        mod = 0;
        m = 0;
        for(int i = 0; i < l; i++){
            temp = (mod * 10) + (arbitrary[i]-48);
            mod = ((mod * 10) + (arbitrary[i]-48)) % n; mod_ans = mod;
            if(m == 1 && temp < n)div_ans.push_back(0);
            if(temp >= n){
                div = temp / n;div_ans.push_back(div);
                m = 1;
            }
        }
        if(sign == '/' && m == 1){
            int z = div_ans.size();
            for(int i = 0; i < z; i++)cout << div_ans[i];
            cout << endl;
        }
        else if(sign == '/' && m == 0)cout << 0 << endl;
        else if(sign == '%')cout << mod_ans << endl;
        div_ans.clear();
    }
    return 0;
}

UVa - 10062 - Tell me the frequencies!

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

int main(){
    int cnt[128], space = 0;
    vector <int> faaltu;
    string sample;
    while(getline(cin, sample)){
        memset(cnt, 0, sizeof(cnt));
        int l = sample.size();
        for(int i = 0; i < l; i++)cnt[sample[i]]++;
        for(int i = 1; i <= 127; i++)if(cnt[i] != 0)faaltu.push_back(cnt[i]);
        int limit = faaltu.size(), mn = 1010, index;
        if(space == 1)cout << endl;
        for(int i = 1; i <= limit; i++){
            for(int j = 32; j <= 127; j++){
                if(mn >= cnt[j] && cnt[j] > 0){
                    mn = cnt[j], index = j;
                }
            }
            if(index == 92)mn /= 2;
            if(mn != 0)cout << index << " " << mn << endl;
            cnt[index] = 0, mn = 1010;
        }
        space = 1;
        faaltu.clear();
    }
    return 0;
}

UVa - 1210 - Sum of Consecutive Prime Numbers

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#define mx 10000
using namespace std;
bool prime[mx];
int main(){
    vector <int> container;
    for(int i = 2; i <= sqrt(mx); i++)
        if(prime[i] == 0)
        for(int j = i+i; j <= mx; j += i)prime[j] = 1;
    for(int i = 2; i <= mx; i++)if(prime[i] == 0)container.push_back(i);
    int number;
    while(cin >> number){
        if(number == 0)break;
        int ans = 0, flag = 0, output = 0;
        for(int i = 0; ; i++){
            if(container[i] > number)break;
            ans += container[i];
            while(ans > number){
                ans -= container[flag];
                flag++;
            }
            if(ans == number)output++;
            if(container[i] == number)break;
        }
        cout << output << endl;
    }
    return 0;
}

UVa - 10035 - Primary Arithmetic

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

int main(){
    long long first, second;
    int mod, carry;
    vector <int> carry1, carry2;
    while(cin >> first >> second){
        if(first == 0 && second == 0)break;
        while(first > 0){
            mod = first % 10;
            carry1.push_back(mod);
            first -= mod;
            first /= 10;
        }
        while(second > 0){
            mod = second % 10;
            carry2.push_back(mod);
            second -= mod;
            second /= 10;
        }
        int l1, l2, mn, mx, ans = 0, in_hand = 0, push;
        l1 = carry1.size(), l2 =carry2.size();
        mn = min(l1, l2);
        mx = max(l1, l2);
        push = mx - mn;
        for(int i = 0; i < push; i++){
            if(l1 > l2)carry2.push_back(0);
            if(l1 < l2)carry1.push_back(0);
        }
        for(int i = 0; i < mx; i++){
            carry = carry1[i] + carry2[i] + in_hand;
            if(carry >= 10){
                ans++;in_hand = 1;
            }
            else in_hand = 0;
        }
        if(ans == 0)cout << "No carry operation." << endl;
        else if(ans == 1)cout << ans << " carry operation." << endl;
        else cout << ans << " carry operations." << endl;
        carry1.clear(), carry2.clear();
    }
    return 0;
}

Saturday, July 19, 2014

UVa - 11385 - Da Vinci Code

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cmath>
#define M 1000000
using namespace std;
int main(){
    vector <int> fib, numb, container;
    fib.push_back(1);
    fib.push_back(2);
    for(int i = 2; i < 45; i++)fib.push_back((fib[i-2]+fib[i-1]));
    char cipher[150];
    int t, n, num;
    cin >> t;
    while(t--){
        cin >> n;
        for(int i = 0; i < n; i++){
            cin >> num; numb.push_back(num);
        }
        getchar();
        gets(cipher);
        int z = 0;
        int l = strlen(cipher);
        char temp[l];
        for(int i = 0; i < l; i++)
            if(cipher[i] >= 'A' && cipher[i] <= 'Z'){
                temp[z] = cipher[i];
                z++;
            }
        temp[z] = '\0';
        for(int i = 0; i < n; i++)
            for(int j = 0; j < 45; j++)
                if(fib[j] == numb[i])container.push_back(j);
        int mx = 0;
        for(int i = 0; i < n; i++)
            if(mx < container[i])mx = max(mx, container[i]);
        char decipher[mx+1];
        memset(decipher, ' ', sizeof(decipher));
        int sz = container.size();
        for(int i = 0; i < sz; i++)decipher[container[i]] = temp[i];
        decipher[mx+1] = '\0';
        puts(decipher);
        container.clear();numb.clear();
        memset(cipher, 0, sizeof(cipher));
        memset(temp, 0, sizeof(temp));
    }
    return 0;
}

UVa - 10018 - Reverse and Add

#include <iostream>
using namespace std;

int main(){
    int t;
    long long n, rev, real, mod, temp;
    cin >> t;
    while(t--){
        cin >> n;
        int cnt = 0;
        while(1){
            real = n;
            rev = 0;
            while(n > 0){
                mod = n % 10;
                rev = (rev*10) + mod;
                n /= 10;
            }
            if(rev == real)break;
            real += rev; n = real; cnt++;
        }
        cout << cnt << " " << rev << endl;
    }
    return 0;
}

UVa - 12157 - Tariff Plan

#include <iostream>
using namespace std;

int main(){
    int t, n, d, mile, juice, cs = 1;
    cin >> t;
    while(t--){
        cin >> n;
        mile = 0;
        juice = 0;
        while(n--){
            cin >> d;
            if(d%10 == 0)d++;
            mile += ((d/30)+1);
            juice += ((d/60)+1);
        }
        int mile_ans = mile * 10, juice_ans = juice * 15;
        if(mile_ans < juice_ans)cout << "Case " << cs << ": Mile " << mile_ans << endl;
        else if(mile_ans > juice_ans)cout << "Case " << cs << ": Juice " << juice_ans << endl;
        else if(mile_ans == juice_ans)cout << "Case " << cs << ": Mile Juice " << juice_ans << endl;
        cs++;
    }
    return 0;
}

UVa - 11559 - Event Planning

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

int main(){
    int person, budget, hotel, week, price_each_person, avail_bed, l, mn, ans;
    while(cin >> person >> budget >> hotel >> week){
        mn = 214748364;
        while(hotel--){
            cin >> price_each_person;
            for(int i = 0; i < week; i++){
                cin >> avail_bed;
                if(avail_bed >= person){
                    ans = price_each_person * person;
                    mn = min(mn, ans);
                }
            }
        }
        if(mn <= budget)cout << mn << endl;
        else cout << "stay home" << endl;
    }
    return 0;
}


UVa - 11879 - Multiple of 17


  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int main(){
  5.     string number;
  6.     while(getline(cin, number)){
  7.         if(number == "0")break;
  8.         int l = number.size(), ans = 0;
  9.         for(int i = 0; i < l; i++)ans = (ans*10 + (number[i] - 48)) % 17;
  10.         if(!ans)cout << 1 << endl;
  11.         else cout << 0 << endl;
  12.     }
  13.     return 0;
  14. }

Friday, July 18, 2014

UVa - 686 - Goldbach's Conjecture (II)

#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#define M 33000
using namespace std;
bool prime[M];
int main(){
    for(int i = 2; i <= sqrt(M); i++)
        if(prime[i] == 0)
            for(int j = i+i; j < M; j += i)prime[j] = 1;

    int n;
    while(cin >> n){
        if(n == 0)break;
        int m = 0, x, y;
        for(int j = 2; j < n; j++)
            if(!prime[j] && !prime[n-j])
                if((j > 1 && j <= (n/2)) && ((n-j) > 1 && (n-j) >= (n/2)))m++;
        cout << m << endl;
    }

    return 0;
}

UVa - 543 - Goldbach's Conjecture

#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#define M 1000000
using namespace std;
bool prime[M];
int main(){
    for(int i = 2; i <= sqrt(M); i++)
        if(prime[i] == 0)
            for(int j = i+i; j < M; j += i)prime[j] = 1;

    int n;
    while(cin >> n){
        if(n == 0)break;
        int m = 0, x, y;
        for(int j = 2; j < n; j++)
            if(!prime[j] && !prime[n-j]){
                    x = j;y = (n-j);
                    m = 1;
                    break;
                }
        if(m)cout << n << " = " << x << " + " << y << endl;
        else cout << "Goldbach's conjecture is wrong." << endl;
    }

    return 0;
}

UVa - 10490 - Mr. Azad and his Son!!!!!

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;

int main(){
    int n;
    while(cin >> n){
        if(n == 0)break;
        int prove = 0;
        for(int i = 2; i <= sqrt(n); i++)
            if(n%i == 0){
                prove = 1;break;
            }
    if(prove == 0){
        if(n == 2)cout << "Perfect: 6!" << endl;
        else if(n == 3)cout << "Perfect: 28!" << endl;
        else if(n == 5)cout << "Perfect: 496!" << endl;
        else if(n == 7)cout << "Perfect: 8128!" << endl;
        else if(n == 13)cout << "Perfect: 33550336!" << endl;
        else if(n == 17)cout << "Perfect: 8589869056!" << endl;
        else if(n == 19)cout << "Perfect: 137438691328!" << endl;
        else if(n == 31)cout << "Perfect: 2305843008139952128!" << endl;
        else cout << "Given number is prime. But, NO perfect number is available." << endl;
    }
    else cout << "Given number is NOT prime! NO perfect number is available." << endl;
    }

    return 0;
}

UVa - 10235 - Simply Emirp

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;

int main(){
    int n, m, mod, l, rev;
    while(cin >> n){
        m = n;
        int prove = 0;
        for(int i = 2; i <= sqrt(n); i++)
            if(n%i == 0){
                prove = 1;break;
            }
        rev = 0;
        if(prove == 0){
            while(m > 0){
                mod = m % 10;
                rev = (rev*10) + mod;
                m /= 10;
            }
            int rev_ans = 0;

            for(int i = 2; i <= sqrt(rev); i++)
                if(rev%i == 0){
                    rev_ans = 1;break;
                }
            if(rev == n)rev_ans = 1;
            if(rev_ans == 0)cout << n << " is emirp." << endl;
            else cout << n << " is prime." << endl;
        }
        else cout << n << " is not prime." << endl;
    }

    return 0;
}

UVa - 11192 - Group Reverse

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

int main(){
    string s, rev_s;
    int l, a, n;
    while(cin >> n){
        if(n == 0)break;
        cin >> s;
        a = s.size();
        l = a / n;
        for(int j = l; j <= a; j += l)
            for(int i = j-1; i >= j-l; i--){
                rev_s.push_back(s[i]);
            }
        cout << rev_s << endl;
        s.clear();rev_s.clear();
    }
    return 0;
}

Thursday, July 17, 2014

UVa - 10991 - Region

#include <iostream>
#include <algorithm>
#include <cmath>
#include <iomanip>
#define pi acos(-1.0)
using namespace std;

int main(){
    double r1, r2, r3;
    double t1, t2, t3;
    double porishima, area_triangle, angle_circle1, angle_circle2, angle_circle3;
    int t;
    cin >> t;
    while(t--){
        cin >> r1 >> r2 >> r3;
        t1 = r2 + r3; t2 = r1 + r3; t3 = r1 + r2;

        porishima = (t1+t2+t3) / 2;
        area_triangle = sqrt(porishima * (porishima-t1) * (porishima-t2) * (porishima-t3));

        angle_circle1 = acos((t2*t2+t3*t3-t1*t1)/(2*t2*t3));
        angle_circle2 = acos((t1*t1+t3*t3-t2*t2)/(2*t1*t3));
        angle_circle3 = (pi - (angle_circle1 + angle_circle2));
        double area_circle = angle_circle1*r1*r1 + angle_circle2*r2*r2 + angle_circle3*r3*r3;
        cout << fixed << setprecision(6) << area_triangle  - area_circle/2 << endl;

    }

    return 0;
}

UVa - 11723 - Numbering Roads

#include <iostream>
using namespace std;

int main(){
    int n , r, ans, cs = 1;
    while(cin >> n >> r){
        if(n == 0 && r == 0)break;
        ans = n/r;
        if(ans <= 26){
            if(n%r == 0)ans--;
            if(n <= r)ans = 0;
            cout << "Case " << cs << ": " << ans << endl;
        }
        else cout << "Case " << cs << ": " << "impossible" << endl;cs++;
    }
    return 0;
}

UVa - 11878 - Homework Checker

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

int main(){
    int a, b, ans, cnt = 0;
    string equation, x, y, answer;
    while(getline(cin, equation)){
        int l = equation.size(), j = 0;
        for(int i = j; i < l; i++){
            if(equation[i] == '+' || equation[i] == '-'){j++;break;}
            x.push_back(equation[i]);j++;
        }
        for(int i = j; i < l; i++){
            if(equation[i] == '='){j++;break;}
            y.push_back(equation[i]);j++;
        }
        for(int i = j; i < l; i++){
            if(equation[i] == '\0'){j++;break;}
            answer.push_back(equation[i]);j++;
        }
        int l1 = x.size(), l2 = y.size(), l3 = answer.size();

        a = x[0] - 48;
        for(int i = 1; i < l1; i++){
            a = (a*10) + (x[i]-48);
        }

        b = y[0] - 48;
        for(int i = 1; i < l2; i++){
            b = (b*10) + (y[i]-48);
        }

        ans = answer[0] - 48;
        for(int i = 1; i < l3; i++){
            ans = (ans*10) + (answer[i]-48);
        }
        int sol;
        for(int i = 0; i < l; i++)
        if(equation[i] == '+'){
            sol = a + b;
            if(sol == ans)cnt++;
            break;
        }
        else if(equation[i] == '-'){
            sol = a - b;
            if(sol == ans)cnt++;
            break;
        }
        x.clear();y.clear();answer.clear();equation.clear();
    }
    cout << cnt << endl;
    return 0;
}

UVa - 10019 - Funny Encryption Method

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

int convert_binary(int z){
    int cnt = 0;
    while(z > 0){
            if(z%2 == 1)cnt++;
            z /= 2;
        }
    return cnt;
}

int main(){
    int t, n, b1, m, mod, b2;
    vector <int> container;
    cin >> t;
    while(t--){
        cin >> n; b1 = 0, m = n, b2 = 0;
        b1 = convert_binary(n);
        while(m > 0){
            mod = m % 10;
            m -= mod;
            m /= 10;
            container.push_back(mod);
        }
        int l = container.size(), sum = 0;
        for(int i = 0; i < l; i++)sum += (container[i] * pow(16,i));
        b2 = convert_binary(sum);
        cout << b1 << " " << b2 << endl;
        container.clear();
    }
    return 0;
}

Wednesday, July 16, 2014

UVa - 11716 - Digital Fortress

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

int main(){
    int t, limit, flag, i;
    string ans, code;
    cin >> t;
    getchar();
    while(t--){
        getline(cin, code);
        int l = code.size();limit = sqrt(l);flag = 0;
        for(i = 1; i <= limit; i++)
            if(i*i == l){flag = 1;break;}
        if(flag == 1){
            for(int j = 0; j < i; j++)
                for(int k = j; k < l; k += i)
                    ans.push_back(code[k]);
            cout << ans << endl;
        }
        else puts("INVALID");ans.clear();
    }

    return 0;
}

UVa - 11428 - Cubes

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

int main(){
    int N, x, y, j, m;
    while(cin >> N){
        if(N == 0)break;m = 0;
        for(j = 1; j <= 60; j++){
            for(int i = 1; i <= 60; i++)
                if((i * i * i) - (j * j * j) == N){
                    x = i; y = j; m = 1; break;
                }
            if(m == 1)break;
        }
        if(j == 61)cout << "No solution" << endl;
        else cout << x << " " << y << endl;
    }
    return 0;
}

UVa - 10924 - Prime Words

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main(){
    int prime[176] = {1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79,
    83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139,149, 151, 157, 163, 167, 173, 179, 181, 191,
    193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307,
    311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431,
    433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563,
    569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677,
    683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823,
    827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967,
    971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039};
    string letters;
    int sum, found;
    while(cin >> letters){
        sum = 0; found = 0;
        int l = letters.size();
        for(int i = 0; i < l; i++)
            if(letters[i] >= 97 && letters[i] <= 122)sum += (letters[i] - 96);
            else sum += (letters[i] - 38);
        for(int i = 0; i < 176; i++){
            if(sum == prime[i]){found = 1;break;}
        }
        if(found)cout << "It is a prime word." << endl;
        else cout << "It is not a prime word." << endl;
    }
    return 0;
}

UVa - 12468 - Zapping

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    int stayed, reached, mx, mn, ans1, ans2, ans;
    while(cin >> stayed >> reached){
        if(stayed == -1 && reached == -1)break;
        mx = max(stayed, reached);
        mn = min(stayed, reached);
        ans1 = mx - mn;
        ans2 = (mn+100) - mx;
        ans = min(ans1, ans2);
        cout << ans << endl;
    }
    return 0;
}

UVa - 483 - Word Scramble

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

int main(){
    string primary_words, rev_words;
    int cnt;
    while(getline(cin, primary_words)){
        int l = primary_words.size();cnt = 0;
        for(int i = 0; i < l; i++){
            cnt++;
            if(primary_words[i] == ' '){
                int m = 0;
                for(int k = cnt-2; k >= 0; k--){
                    rev_words.push_back(primary_words[i-1]);i--;m++;
                }i += m;
                rev_words.push_back(' ');cnt = 0;
            }
            if(i == l-1){
                int m = 0;
                for(int k = cnt-1; k >= 0; k--){
                    rev_words.push_back(primary_words[i]);i--;m++;
                }i += m;
            }
        }
        cout << rev_words << endl;
        rev_words.clear();
    }
    return 0;
}

Saturday, July 12, 2014

UVa - 488 - Triangle Wave

#include <iostream>
using namespace std;

int main(){
    int t, n, m;
    cin >> t;
    while(t--){
        cin >> n;
        cin >> m;
        while(m--){
            for(int i = 1; i <= n; i++){
                for(int j = 1; j <= i; j++){
                    cout << i;
                }
                cout << endl;
            }
            for(int i = n-1; i > 0; i--){
                for(int j = i; j > 0; j--){
                    cout << i;
                }
                cout << endl;
            }
            if(m == 0 && t == 0)break;
            cout << endl;
        }
    }
    return 0;
}

UVa - 12502 - Three Families

#include <iostream>
using namespace std;

int main(){
    int x, y, z, t, ans;
    cin >> t;
    while(t--){
        cin >> x >> y >> z;
        ans = z * (2*x - y) / (x + y);
        cout << ans << endl;
    }

    return 0;
}

UVa - 12459 - Bees' ancestors

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <iomanip>
#include <vector>
#include <cmath>
#define Pi acos(-1)
using namespace std;

int main(){
    int g;
    long long ans;
    vector <long long> fib;
    while(cin >> g){
        if(g == 0)break;
        fib.push_back(0);
        fib.push_back(1);
        for(int i = 1; i <= g; i++){
            ans = fib[i-1] + fib[i];
            fib.push_back(ans);
        }
        cout << ans << endl;fib.clear();
    }

    return 0;
}

UVa - 900 - Brick Wall Patterns

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

int main(){
    long long ans;int n;
    vector <long long> fib;
    while(cin >> n){
        if(n == 0)break;
        fib.push_back(0);fib.push_back(1);
        for(int i = 1; i <= n; i++){
            ans = fib[i-1] + fib[i];
            fib.push_back(ans);
        }
        cout << ans << endl;fib.clear();
    }
    return 0;
}