Friday, April 24, 2015

UVa - 579 - Clock Hands


  1. #include <iostream>
  2. #include <cstdio>
  3. #include <iomanip>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7. int main(){
  8.     double h, m, ht, mt, angle, div, te1, te2, mp1, temp1, temp2;
  9.     while(scanf("%lf:%lf", &h, &m) == 2){
  10.         if(h == 0 && h == m)break;
  11.         div = (5*m)/60;
  12.         ht = (h*5) + div; mt = m;
  13.         te1 = max(ht, mt);
  14.         te2 = min(ht, mt);
  15.         mp1 = 60 - te1;
  16.         temp1 = (mp1 + te2)*6;
  17.         temp2 = (te1 - te2)*6;
  18.         if(temp1 < 0)temp1 *= -1;
  19.         if(temp2 < 0)temp2 *= -1;
  20.         angle = min(temp1, temp2);
  21.         while(angle > 180)angle -= 180;
  22.         cout << fixed << setprecision(3) << angle << endl;
  23.     }
  24.     return 0;
  25. }

UVa - 576 - Haiku Review


  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main(){
  5.     string input;
  6.     while(getline(cin, input)){
  7.         if(input == "e/o/i")break;
  8.         int sz = input.size(), flag = 1, cnt = 0, f = 0;
  9.         for(int i = 0; i < sz; i++){
  10.             if(input[i] == 'a' || input[i] == 'e' || input[i] == 'i' || input[i] == 'o' || input[i] == 'u' || input[i] == 'y'){
  11.                 if(!f)cnt += 1, f = 1;
  12.             }
  13.             else f = 0;
  14.             if(input[i] == 47 || i == sz-1){
  15.                 if(flag == 1 && cnt == 5)flag += 1, cnt = 0;
  16.                 else if(flag == 2 && cnt == 7)flag += 1, cnt = 0;
  17.                 else if(flag == 3 && cnt == 5)flag += 1, cnt = 0;
  18.                 else break;
  19.             }
  20.         }
  21.         if(flag == 4)cout << "Y" << endl;
  22.         else cout << flag << endl;
  23.     }
  24.     return 0;
  25. }

UVa - 574 - Sum It Up


  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. int main(){
  8.     double height, climb, slid, fatigue;
  9.     double fatig, limit;
  10.     int  day, flag;
  11.     while(cin >> height >> climb >> slid >> fatigue){
  12.         if(height == 0 && height == climb && climb == slid && slid == fatigue)break;
  13.         limit = 0, day = 0, flag = 0;
  14.         fatig = (climb * fatigue) / 100.0;
  15.         while(1){
  16.             limit += climb;day++;
  17.             if(limit > height){flag = 1; break;}
  18.             limit -= slid;
  19.             if(limit < 0)break;
  20.             climb -= fatig;
  21.             if(climb <= 0)climb = 0;
  22.         }
  23.         if(flag)cout << "success on day " << day << endl;
  24.         else cout << "failure on day " << day << endl;
  25.     }
  26.     return 0;
  27. }

UVa - 573 - The Snail


  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. int main(){
  8.     double height, climb, slid, fatigue;
  9.     double fatig, limit;
  10.     int  day, flag;
  11.     while(cin >> height >> climb >> slid >> fatigue){
  12.         if(height == 0 && height == climb && climb == slid && slid == fatigue)break;
  13.         limit = 0, day = 0, flag = 0;
  14.         fatig = (climb * fatigue) / 100.0;
  15.         while(1){
  16.             limit += climb;day++;
  17.             if(limit > height){flag = 1; break;}
  18.             limit -= slid;
  19.             if(limit < 0)break;
  20.             climb -= fatig;
  21.             if(climb <= 0)climb = 0;
  22.         }
  23.         if(flag)cout << "success on day " << day << endl;
  24.         else cout << "failure on day " << day << endl;
  25.     }
  26.     return 0;
  27. }

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;
}