সোমবার, ৩ জুন, ২০১৯

UVA 10100 - Longest Match

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a, b;
    int t = 0;
    while (getline(cin, a))
    {
        t++;
        getline(cin, b);
        if (a.length() == 0 || b.length() == 0)
            printf("%2d. Blank!\n", t);
        else
        {
            for (int i = 0; i < a.length(); i++)
                if (!(a[i] >= 'A' && a[i] <= 'Z' || a[i] >= 'a' && a[i] <= 'z' || a[i] >= '0' && a[i] <= '9'))
                    a[i] = ' ';
            for (int i = 0; i < b.length(); i++)
                if (!(b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] >= '0' && b[i] <= '9'))
                    b[i] = ' ';
            string c[501], d[501];
            istringstream strma(a);
            int n = 1;
            while (strma >> c[n])
                n++;
            istringstream strmb(b);
            int m = 1;
            while (strmb >> d[m])
                m++;
            int T[501][501];
            for (int j = 0; j < m; j++)
                T[0][j] = 0;
            for (int i = 1; i < n; i++)
            {
                T[i][0] = 0;
                for (int j = 1; j < m; j++)
                    if (c[i] == d[j])
                    {
                        T[i][j] = T[i - 1][j - 1] + 1;
                    }

                    else
                        T[i][j] = max(T[i - 1][j], T[i][j - 1]);
            }
            printf("%2d. Length of longest match: %d\n", t, T[n - 1][m - 1]);
        }
    }
    return 0;
}

UVA 10616 - Divisible Group Sums

#include<bits/stdc++.h>
using namespace std;
int n,m,d,q;
int ar[205],vis[205][205][15];
int dp(int i,int sum,int c)
{
    if(c==m&&sum==0)
        return 1;
    if(c==m&&sum!=0)
        return 0;
    if(i==n)
        return 0;
    if(vis[i][sum][c] != -1)
        return vis[i][sum][c];
    vis[i][sum][c] = dp(i+1, sum%d, c) + dp(i+1, (sum+ar[i])%d, c+1);
    return vis[i][sum][c];
}
int main()
{
    int i, j, res;
    j = 1;
    while(cin>>n>>q)
    {
        if(n==0&&q==0)
            break;
        for(i=0;i<n;i++)
        {
            scanf("%d",&ar[i]);
        }
        printf("SET %d:\n", j);
        for(i = 0; i < q; i++)
        {
            scanf("%d%d",&d,&m);
            memset(vis,-1,sizeof(vis));
            res = dp(0, 0, 0);
            printf("QUERY %d: %d\n", i+1, res);
        }
        j++;
    }
    return 0;
}

রবিবার, ২ জুন, ২০১৯

UVA 10878 - Decode the tape

#include<stdio.h>
char s[64];
int main()
{
    int i;
    int sum, found;
    while(gets(s))
    {
        int bit = 128;
        i = sum = found = 0;
        if(s[i] != '|')
            continue;
        for(;s[i];++i)
        {
            if(s[i]==' ')
                bit>>= 1;
            else if(s[i] == 'o')
            {
                sum += bit;
                bit >>= 1;
            }
        }
        printf("%c", sum);
    }
    return 0;
}

UVA 12662 - Good Teacher

#include <stdio.h>
#include <string.h>

int main()
{
    int n, q, x;
    char s[105][10];
    while(scanf("%d", &n) == 1)
    {
        for(int i = 1; i <= n; i++)
            scanf("%s", s[i]);
        scanf("%d", &q);
        while(q--)
        {
            scanf("%d", &x);
            if(strcmp(s[x], "?"))
                puts(s[x]);
            else
            {
                int l, r, p;
                l = r = 0;
                p = x - 1;
                while(p > 0 && !strcmp(s[p], "?"))
                    p--, l++;
                if(p <= 0)
                    l = 0x3f3f3f;
                p = x + 1;
                while(p <= n && !strcmp(s[p], "?"))
                    p++, r++;
                if(p > n)
                    r = 0x3f3f3f;
                l++, r++;
                if(l == r)
                    printf("middle of %s and %s\n", s[x - l], s[x + r]);
                else if(l < r)
                {
                    for(int j = 0; j < l; j++)
                        printf("right of ");
                    printf("%s\n", s[x - l]);
                }
                else
                {
                    for(int j = 0; j < r; j++)
                        printf("left of ");
                    printf("%s\n", s[x + r]);
                }
            }
        }
    }
    return 0;
}

11309 - Counting Chaos

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

bool isPal(int h, int m)
{
    vector<int> vec, tmp, vec2 ;
    if(h == 0)
    {
        if(m < 10)
            return true;
        else
        {
            while(m != 0)
            {
                vec.push_back(m%10);
                m/=10;
            }
            tmp = vec;
            reverse(vec.begin(), vec.end());
            if(vec == tmp)
                return true;
            else
                return false;
        }
    }
    else
    {
        while(h != 0)
        {
            vec.push_back(h % 10);
            h/=10;
        }
        reverse(vec.begin(), vec.end());

        if(m<10)
            vec.push_back(0);
        while(m != 0)
        {
            vec2.push_back(m % 10);
            m/=10;
        }
        reverse(vec2.begin(), vec2.end());

        vec.insert(vec.end(), vec2.begin(), vec2.end());
        tmp = vec;
        reverse(vec.begin(), vec.end());
        if(vec == tmp)
            return true;
        else
            return false;
    }
}

int main()
{
    int casos, hh, mm;
    bool flag = 0;
    scanf("%d", &casos);
    while(casos--)
    {
        scanf("%d:%d", &hh, &mm);
        flag = false;

        while(flag != 1)
        {
            mm++;
            if(mm == 60)
            {
                mm = 0;
                hh++;
                if(hh == 24)
                    hh = 0;
            }
            if(isPal(hh,mm))
            {
                flag = true;
                if(hh < 10)
                    printf("0");
                printf("%d:", hh);
                if(mm<10)
                    printf("0");
                printf("%d\n", mm);
            }
        }
    }
    return 0;
}

UVA 12195 - Jingle Composing

#include<stdio.h>
int main()
{
    char s[201];
    while(gets(s))
    {
        if(s[0] == '*')
            break;
        int st = 0, i, find = 0, Sum = 0;
        for(i = 1; s[i]; i++)
        {
            if(s[i] == '/')
            {
                if(Sum == 1000000)
                    find++;
                Sum = 0;
            }
            switch(s[i])
            {
            case 'W':
                Sum += 1000000;
                break;
            case 'H':
                Sum +=  500000;
                break;
            case 'Q':
                Sum +=  250000;
                break;
            case 'E':
                Sum +=  125000;
                break;
            case 'S':
                Sum +=   62500;
                break;
            case 'T':
                Sum +=   31250;
                break;
            case 'X':
                Sum +=   15625;
                break;
            }
        }
        printf("%d\n", find);
    }
    return 0;
}

UVA 10589 - Area

#include <stdio.h>

int main()
{
    int n, a;
    while(scanf("%d %d", &n, &a)!=EOF)
    {
        if(n == 0 && a == 0)
            break;
        int m = 0, i;
        double x, y;
        for(i = 0; i < n; i++)
        {
            scanf("%lf %lf", &x, &y);
            if(x*x+y*y <= a*a && (x-a)*(x-a)+y*y <= a*a &&
                    x*x+(y-a)*(y-a) <= a*a && (x-a)*(x-a)+(y-a)*(y-a) <= a*a)
                m++;
        }
        printf("%.5lf\n", (double)m*a*a/n);
    }
    return 0;
}

Factory Pattern

Factory Method  is a creational design pattern that provides an interface for creating objects in a superclass but allows subclasses to alte...