Tuesday, June 2, 2015

UVa - 474 - Heads / Tails Probability

Problem Link: 474 - Heads / Tails Probability

  1. /****************#####    بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم   #####******************
  2. __________________________________________________________________________
  3. ######################  Ya-Seen Arafat(ACWizard) #########################
  4. ######################        UAP-CSE-33B        #########################
  5. *************************************************************************/
  6. #include <bits/stdc++.h>
  7. #define sc(n) scanf("%d", &n)
  8. #define S 2003
  9. using namespace std;
  10. typedef long long LL;
  11.  
  12. void Do(){
  13.     int n;
  14.     while(sc(n) == 1){
  15.         if(== 6){
  16.             puts("2^-6 = 1.562e-2");
  17.             continue;
  18.         }
  19.         int power = floor(n*log10(2)+1);
  20.         double num = (-(double)n*log10(2)+(double)power);
  21.         num = pow(10, num);
  22.         printf("2^-%d = %.3lfe-%d\n", n, num, power);
  23.     }
  24. }
  25.  
  26. int main(){
  27.     ios_base::sync_with_stdio(0); cin.tie(0);
  28.     #ifndef ONLINE_JUDGE
  29.     ///freopen("inp","r",stdout);
  30.     ///freopen("contest.txt","w",stdout);
  31.     #endif
  32.     Do();
  33.     return 0;
  34. }

UVa - 10420 - List of Conquests

Problem Link10420 - List of Conquests

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

int main(){
    string name, country;
    map <string, int> number;
    vector <string> keep;
    int test;
    cin >> test;
    getchar();
    while(test--){
        cin >> country;
        getline(cin, name);
        if(number[country] == 0)number[country]++, keep.push_back(country);
        else number[country]++;
    }
    sort(keep.begin(), keep.end());
    int sz = keep.size();
    for(int i = 0; i < sz; i++)cout << keep[i] << " " << number[keep[i]] << endl;
    return 0;
}

UVa - 10323 - Factorial! You Must be Kidding!!!

Problem Link10323 - Factorial! You Must be Kidding!!!

  1. #include<cstdio>
  2.  
  3. using namespace std;
  4.  
  5. int main(){
  6.     int n;
  7.  
  8.     while(scanf("%d",&n)==1){
  9.         if((n>=0 && n<=7) || (n<0 && n%2==0)) printf("Underflow!\n");
  10.         else if(n==8) printf("40320\n");
  11.         else if(n==9) printf("362880\n");
  12.         else if(n==10) printf("3628800\n");
  13.         else if(n==11) printf("39916800\n");
  14.         else if(n==12) printf("479001600\n");
  15.         else if(n==13) printf("6227020800\n");
  16.         else printf("Overflow!\n");
  17.     }
  18.  
  19.     return 0;
  20. }

Sunday, May 3, 2015

UVa - 495 - Fibonacci Freeze

    Problem Link: 495 - Fibonacci Freeze
    #include <bits/stdc++.h>
    #define S 5003
    using namespace std;
    
    vector <int> Fib[S], addition;
    
    void Fib_Number(){
        Fib[0].push_back(0);
        Fib[1].push_back(1);
        for(int i = 2; i < S; i++){
            int sz1 = Fib[i-2].size()-1;
            int sz2 = Fib[i-1].size()-1;
            int tmp, ad, c = 0;
            while(sz1 >= 0 && sz2 >= 0){
                ad = c+Fib[i-2][sz1]+Fib[i-1][sz2];
                if(ad > 9){
                    c = ad/10;
                    ad %= 10;
                }
                else c = 0;
                addition.push_back(ad);
                sz1--, sz2--;
            }
            if(sz1 >= 0){
                while(sz1 >= 0){
                    ad = c+Fib[i-2][sz1];
                    if(ad > 9){
                        c = ad/10;
                        ad %= 10;
                    }
                    else c = 0;
                    addition.push_back(ad);
                    sz1--;
                }
            }
            if(sz2 >= 0){
                while(sz2 >= 0){
                    ad = c+Fib[i-1][sz2];
                    if(ad > 9){
                        c = ad/10;
                        ad %= 10;
                    }
                    else c = 0;
                    addition.push_back(ad);
                    sz2--;
                }
            }
            if(c)addition.push_back(c);
            int sz = addition.size();
            for(int z = sz-1; z >= 0; z--)Fib[i].push_back(addition[z]);
            addition.clear();
        }
    }
    
    int main(){
        Fib_Number();
        int n;
        while(cin >> n){
            int sz = Fib[n].size();
            cout << "The Fibonacci number for " << n << " is ";
            for(int i = 0; i < sz; i++)cout << Fib[n][i];
            puts("");
        }
        return 0;
    }

UVa - 11060 - Beverages

Problem Link: 11060 - Beverages
  1. #include <bits/stdc++.h>
  2. #define S 103
  3. using namespace std;
  4.  
  5. vector <int> Order[S];
  6. queue <int> ans;
  7. map <string, int> Bev;
  8. map <int, string> Ans;
  9. int cn, indegree[S];
  10.  
  11. int main(){
  12.     string Beverages, x, y;
  13.     int n, m, cs = 0;
  14.     while(cin >> n){
  15.         for(int i = 1; i <= n; i++){
  16.             cin >> Beverages;
  17.             Bev[Beverages] = i;
  18.             Ans[i] = Beverages;
  19.         }
  20.         memset(indegree, 0sizeof(indegree));
  21.         cin >> m;
  22.         for(int i = 0; i < m; i++){
  23.             cin >> x >> y;
  24.             Order[Bev[x]].push_back(Bev[y]);
  25.             indegree[Bev[y]]++;
  26.         }
  27.         bool f = true;
  28.         while(f){
  29.             int cn = 0;
  30.             for(int i = 1; i <= n; i++){
  31.                 if(!indegree[i]){
  32.                     indegree[i] = -1;
  33.                     ans.push(i);
  34.                     int sz = Order[i].size();
  35.                     for(int z = 0; z < sz; z++)indegree[Order[i][z]]--;
  36.                     break;
  37.                 }
  38.                 cn++;
  39.             }
  40.             if(cn == n)break;
  41.         }
  42.         cout << "Case #" << ++cs << ": Dilbert should drink beverages in this order:";
  43.         while(!ans.empty()){
  44.             cout << " " << Ans[ans.front()];
  45.             ans.pop();
  46.         }
  47.         puts(".");
  48.         puts("");
  49.         Ans.clear(), Bev.clear();
  50.         for(int i = 0; i <= n; i++)Order[i].clear();
  51.     }
  52.     return 0;
  53. }

Saturday, May 2, 2015

UVa - 10004 - Bicoloring

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

int dirX[] = {1, 0, -1, 0, 1, -1, 1, -1};
int dirY[] = {0, 1, 0, -1, 1, -1, -1, 1};

int row, col, cnt, vis[103][103];
string grid[103];

int dfs(int i, int j){
    if(i < 0 || i >= row || j < 0 || j >= col || grid[i][j] == 'L' || vis[i][j])return 0;
    vis[i][j] = 1;
    cnt++;
    for(int z = 0; z < 8; z++){
        int px = i+dirX[z];
        int py = j+dirY[z];
        dfs(px, py);
    }
    return cnt;
}

int main(){
    int t, cs = 0;
    bool sp = false;
    string s;
    cin >> t;
    getchar();
    getchar();
    while(t--){
        int x, y;
        row = 0;
        if(sp)puts("");
        sp = true;
        while(getline(cin, s) && s.size()){
            if(s[0] == 'L' || s[0] == 'W'){
                grid[row] = s;
                col = grid[row++].size();
            }
            else{
                cnt = 0;
                istringstream cinn(s);
                cinn >> x;
                cinn >> y;
                memset(vis, 0, sizeof(vis));
                cout << dfs(x-1, y-1) << endl;
            }
        }
    }
    return 0;
}