Friday, March 25, 2016

UVa 156 - Anagrams

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
using namespace std;

int main()
{
    string s;
    map<string,int> freq;
    map<string,string> store;

    while(cin>>s and s!="#")
    {
        string tmp = s;

        transform(ALL(s), s.begin(), ::tolower);    ///***
        sort(ALL(s));
        freq[s]++;
        store[s] = tmp;

    }

    vector <string> vs;
    map<string,int> :: iterator it;

    for(it=freq.begin(); it!=freq.end(); it++)
    {
        if(it->second == 1)     ///***
        {
            vs.push_back( store[it->first] );   ///***
        }
    }

    sort(ALL(vs));

    REP(i,SZ(vs))
    {
        cout << vs[i] << "\n";
    }
    return 0;
}

UVa 10038 - Jolly Jumpers

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
using namespace std;

int a[12345], ar[12345];

int main()
{
    int n;
    while(cin>>n)
    {
        memset(ar,0,sizeof ar);

        REP(i,n)
        {
            cin>>a[i];
            if(i) ar[abs(a[i] - a[i-1])]++;
        }

        int f = 0;
        FOR(i,1,n-1)
        {
            if(ar[i]==0)
            {
                f=1;
                pri("Not jolly");
                break;
            }
        }
        if(!f) pri("Jolly");
    }

    return 0;
}

Modified Sorting Using Compare Function

struct node
{
   int x, y, z;
} A[5];

ধরেন, আপনি A অ্যারেটা z ভ্যারিয়েবল অনুযায়ী বড় থেকে ছোট আকারে সাজাবেন। এক্ষেত্রে sort() কীভাবে ইউজ করা যায় দেখা যাক।

প্রথমেই sort() ফাংশনের প্যারামিটারগুলো দেখি।

sort(starting element pointer, ending ending pointer + 1, compare function name);

অর্থাৎ, যদি ফাংশন নেম comp হয় আর আপনি পুরা A অ্যারেটা সর্ট করতে চান comp ফাংশন অনুযায়ী, তাহলে লাইনটা হবে নিম্নরূপঃ

sort(A + 0, A + 4 + 1, comp);

বা

sort(A, A + 5, comp);

এখানে A + 0 অর্থাৎ A[0] হল অ্যারের প্রথম এলিমেন্ট।
A + 4 অর্থাৎ A[4] হল অ্যারের শেষ এলিমেন্ট।

তাহলে আপনি যদি অ্যারেটার ১ নং ইন্ডেক্স থেকে ৩নং ইন্ডেক্স সর্ট করতে চাইতেন শুধু, তাহলে লাইনটা কেমন হত?

sort(A + 1, A + 3 + 1, comp);

অর্থাৎ

sort(A + 1, A + 4, comp);

এবার আসি comp ফাংশনে। দেখা যাক এটি কীভাবে কাজ করে।

comp ফাংশনটা জাস্ট একটা ডিজাইন যেটার কাজ হল বলে দেওয়া sort() ফাংশনটা কীভাবে কাজ করবে।

comp-এ সব সময় দুটা প্যারামিটার রাখতে হয়, এবং এটা রিটার্ন করবে ট্রু অর ফলস, অর্থাৎ bool টাইপ।

comp-এর কাজ হল বলে দেওয়া, অ্যারের যে কোন দুটা এলিমেন্টের মধ্যে কোনটা আগে থাকবে এবং কোনটা পরে থাকবে, অর্থাৎ এক্ষেত্রে comp বলে দিবে যে A অ্যারের ১ আর ৩ নং এলিমেন্টের মধ্যে ১-এর z বড় হয়, তাহলে তারা ঠিকই আছে, তাদের সর্টের প্রয়োজন নাই। যদি এলিমেন্টটার z ছোট হয়, তাহলে সর্ট করতে হবে।

comp ফাংশনটা অনেকটা দাঁড়াচ্ছে তাহলেঃ

bool comp (node p, node q)
{ };

এখানে, p, q প্যারামিটার দুটা হল A অ্যারের দুটা এলিমেন্ট, এবং অবশ্যই p অ্যারেতে আগে অবস্থিত আর q পরে অবস্থিত।

p, q এর টাইপ node কারণ অ্যারেটার টাইপও নোড।

যেহেতু p হচ্ছে অ্যারেতে যে এলিমেন্ট আগে আছে আর q হচ্ছে যেটা পরে আছে, তার মানে, p.z > q.z হলে p আর q সর্টেডই আছে? আর যদি না হয়, তাহলে তাদের সর্ট করতে হবে।

comp ফাংশনটা বলে দেয় যে সর্টেড আছে কিনা। অর্থাৎ, সর্টেড থাকলে (মানে আপনি যেভাবে সর্টেড রাখতে চান, এক্ষেত্রে আমরা চাচ্ছি z অনুযায়ী descending) ফাংশনটা true return করবে, নতুবা ফলস।

আর একটা ইম্পর্ট্যান্ট কথা। আপনার ফাংশন যেন অবশ্যই বলে দেয় p.z = q.z হলে কী হবে!

p.z = q.z হলে আপনি x বা y অনু্যায়ীও চেক করতে পারেন। ধরেন, p.z = q.z হলে আমি চাই x অনু্যায়ী ascendingly sort হবে। তখন আমার ফাংশনে তা-ই লিখে দিতে হবে। কিন্তু p.x = q.x হলে? সেক্ষেত্রে আবার y অনুযায়ীও দেখতে পারেন। কিন্তু তাও সমান হলে?

সেক্ষেত্রে false রিটার্ন করা মাস্ট। এটা একটা ইম্পর্ট্যান্ট পার্ট। এটা না করলে আপনি কিন্তু এটার্নাল লুপে পরে যেতে পারেন।

এবার ফাংশনটা লিখে দেখা যাক।

bool cmp (node p, node q)
{
      if (p.z > q.z)
         return true;
      else if (p.z == q.z)
     {
         if (p.x < q.x)
         return true;
      else return false; //অর্থাৎ, p.x == q.x হলে false রিটার্ন্ট হচ্ছে
    }
    else return false;
};

এ ফাংশনটা বুঝাচ্ছে যে, আপনি এমনভাবে সর্ট করতে চান যেন সর্টেড অ্যারের যে এলিমেন্ট আগে থাকবে, তার z ভ্যারিয়েবলের মান পরের এলিমেন্টের z থেকে বড় হবে। যদি তাদের z সমান হয়, তবে যেটা আগে আছে তার x পরেরটার থেকে ছোট হবে।

এবার নিজের কোড করে প্র্যাক্টিস করে জিনিসটা হাতে আনতে হবে।

PS: অপারেটর ওভারলোড করেও করা যায়। কিন্তু ফাংশন লিখে করা আমার কাছে ইজিয়ার লাগে, অপারেটর ওভারলোডিং-এর দরকার কখনও হয়নি ফাংশন ইউজের জন্য~
 
Hope this helps~
by - Tahsin Masrur

Thursday, March 24, 2016

UVa 454 - Anagrams

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
using namespace std;

string anagrams(string s)   ///removing spaces from the string
{
    string tst (s);
    tst.erase(remove(ALL(tst),' '), tst.end());     ///**
    sort(ALL(tst));
    return tst;
}

int main()
{
    string s[1234];
    int T;

    cin>>T;

    getchar();
    getchar();

    while(T--)
    {
        int idx = 0;
       
        while(getline(cin,s[idx++]) and s[idx-1]!="")

        sort(s,s+idx);

        REP(i,idx)
        {
            FOR(j,i+1,idx-1)
            {
                if(anagrams(s[i]) == anagrams(s[j]))
                {
                    cout << s[i] << " = " << s[j] << endl;
                }
            }
        }
        if(T) cout << "\n";
    }
    return 0;
}

Tuesday, March 22, 2016

UVa 200 - Rare Order

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define WRITE(fn) freopen(fn, "w", stdout);
#define pcs printf("Case #%d:\n", ++cs);
using namespace std;

int main()
{
    string s[123456];
    int idx = 0, mxln = -1;

    while(cin>>s[idx++])
    {
        mxln = max(mxln, SZ(s[idx-1]));
        if(s[idx-1]=="#") break;
    }

    map<char,int> mp;
    char ch;

    int totalstring = idx - 1;

    REP(i,mxln)   /// nice koddur jaba? max string len porjonto
    {
        REP(j,totalstring)  /// pashe koddur jabe? total jotota string toto
        {
            if(i < SZ(s[j]))    // niche jotokkhon prjnto string lenth er moddhe thakbe totokkhn char prnt korbe
                ch = s[j][i];

            if(mp[ch]==0) printf("%c", ch), mp[ch]++;
        }
    }
    printf("\n");

    return 0;
}

Monday, March 21, 2016

UVa 353 - Pesky Palindromes

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define WRITE(fn) freopen(fn, "w", stdout);
#define pcs printf("Scenario #%d:\n", ++cs);
using namespace std;

bool ispal(string s)
{
    string n = s;
    reverse(ALL(s));
    if(n==s) return 1;
    else return 0;
}

int main()
{
    string s,tst;
    while(cin>>s)
    {
        map <string,int> mp;
        int cnt = 0;

        REP(i,SZ(s))
        {
            FOR(j,1,SZ(s)-i)
            {
                tst = s.substr(i,j);
                if(mp[tst]==0 and ispal(tst)) cnt++;
                mp[tst]++;
            }
        }
        printf("The string '");  cout << s;  printf("' contains %d palindromes.\n", cnt);
    }
    return 0;
}



UVa 401 - Palindromes

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define WRITE(fn) freopen(fn, "w", stdout);
#define pcs printf("Scenario #%d:\n", ++cs);
using namespace std;

int main()
{
    string s,tst;
    map<char,char> mp;

    mp['A'] = 'A';
    mp['E'] = '3';
    mp['H'] = 'H';
    mp['I'] = 'I';
    mp['J'] = 'L';
    mp['L'] = 'J';
    mp['M'] = 'M';
    mp['O'] = 'O';
    mp['S'] = '2';
    mp['T'] = 'T';
    mp['U'] = 'U';
    mp['V'] = 'V';
    mp['W'] = 'W';
    mp['X'] = 'X';
    mp['Y'] = 'Y';
    mp['Z'] = '5';
    mp['1'] = '1';
    mp['2'] = 'S';
    mp['3'] = 'E';
    mp['5'] = 'Z';
    mp['8'] = '8';

    while(cin>>s)
    {
        int p = 0, m = 0;
       
        tst = s;

        reverse(ALL(tst));

        if(tst == s) p = 1;

        tst = "";

        REP(i,SZ(s))
        {
            tst += mp[s[i]];
        }

        reverse(ALL(tst));

        if(s == tst) m = 1;

             if(p and m)   cout << s ,  printf(" -- is a mirrored palindrome.\n");
        else if(m and !p)  cout << s ,  printf(" -- is a mirrored string.\n");
        else if(!m and p)  cout << s ,  printf(" -- is a regular palindrome.\n");
        else if(!m and !p) cout << s ,  printf(" -- is not a palindrome.\n");

        cout << "\n";
    }
    return 0;
}

UVa 10450 - World Cup Noise

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define WRITE(fn) freopen(fn, "w", stdout);
#define pcs printf("Scenario #%d:\n", ++cs);
using namespace std;

LL ar[55];

void fib()
{
    ar[1] = 2, ar[2] = 3;

    FOR(i,3,55)
    {
        ar[i] = ar[i-1] + ar[i-2];
    }
}

int main()
{
    int cs = 0;
 
    fib();

    int n,x;
    cin>>n;
    while(n--)
    {
        cin>>x;
        pcs;
        pri(ar[x]);
        puts("");
    }
    return 0;
}

UVa 10429 - List of Conquests

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REP(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define WRITE(fn) freopen(fn, "w", stdout);
#define pcs printf("Case %d: ", ++cs);
using namespace std;

int main()
{
    int n;
    string s,ss;
    map <string,int> mp;
    set <string> st;

    cin>>n;

    while(n--)
    {
        cin>>s;
        getline(cin,ss);
        mp[s]++;
        st.insert(s);
    }

    set <string> :: iterator it;

    for(it = st.begin(); it != st.end(); it++)
    {
        prii(*it, mp[*it]);
    }

    return 0;
}

Sunday, March 20, 2016

UVa 637 - Booklet Printing

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REP(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define WRITE(fn) freopen(fn, "w", stdout);
#define pcs printf("Case %d: ", ++cs);
using namespace std;

/// Think a real world situation. you are told to print a book of sheets. as you need to use 1 press sheet
/// for 4 pages. so take required sheets ceil(n/4.0) . count totalpage in takne sheet.
/// loop from your last sheet to frst sheet.. if u're on sheet that's greater than our input sheet nmbr then leave it blank
/// *** Think Real World; Assume yourself a printsman."" The problem is solved"

int main()
{
    int n;

    while(cin>>n and n)
    {
        if(n==1)
        {
             printf("Printing order for %d pages:\n", n);
             printf("Sheet 1, front: Blank, 1\n");
             continue;
        }

        int ReqSheet = ceil(n/4.0);

        int TotalPageInSheet = ReqSheet * 4;

        printf("Printing order for %d pages:\n", n);

        int lst = TotalPageInSheet;
        int fst = 1;

        FOR(i,1,ReqSheet)
        {
            printf("Sheet %d, front: ", i);

            if(lst > n)
                printf("Blank, ");
            else
                printf("%d, ",lst);

            printf("%d\n", fst);

            lst--;
            fst++;

            printf("Sheet %d, back : ", i);

            printf("%d", fst);

            if(lst > n)
                printf(", Blank\n");
            else
                printf(", %d\n",lst);

            lst--;
            fst++;
        }
    }
    return 0;
}

UVa 490 - Rotating Sentences

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define WRITE(fn) freopen(fn, "w", stdout);
#define pcs printf("Case %d: ", ++cs);
using namespace std;

/// If you’ve already reached the end of one of the strings, print a space.

int main()
{
    string s[105];
    int i = 0, mxln=-1;

    while(getline(cin,s[i++]))
    {
        mxln = max(mxln, SZ(s[i-1]));
    }

    int totalstring = i-1;

    REP(i,mxln)
    {
        REV(j,totalstring)
        {
            if(SZ(s[j]) > i)    /// in the coln, if mx col len exceeds the len of that string then, print space
            {
                printf("%c", s[j][i]);
            }
            else
                printf(" ");
        }
        printf("\n");
    }

    return 0;
}

Saturday, March 19, 2016

UVa 11728 - Alternate Task

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REP(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define PI 2*acos(0.0)
#define pcs printf("Case %d: ", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

int sum(int n)
{
    int sm = 0;
    for(int j=1; j*j<=n; j++)
    {
        if(n%j==0)
        {
            sm += j;
            if(j!=n/j) sm+=n/j;
        }
    }
    return sm;
}

int cs = 0;

int main()
{
    int x;

    while(cin>>x and x)
    {
        int f = 0, ans;

        for(int i = x; i>=1; i--)
        {
            if(sum(i)==x)
            {
                f=1;
                ans = i;
                break;
            }
        }
        pcs;
        if(!f) pri(-1);
        else pri(ans);
    }

    return 0;
}

Friday, March 18, 2016

UVa 10195 - The Knights Around The Round Table

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define PI 2*acos(0.0)
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/// Radius of inscribed circle = Triangle Area / Half Perimeter
/// s = (a+b+c)/2+1e-8; -> add eps for case 0,0,0

int main()
{
    double a,b,c,s,area,r;

    while(cin>>a>>b>>c)
    {
        s = (a+b+c)/2+1e-8;  ///** add eps
        area = sqrt(s*(s-a)*(s-b)*(s-c));
        r = area/s;
        printf("The radius of the round table is: %.3lf\n", r);
    }
    return 0;
}

UVa 10684 - The Jackpot

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

///This is an maximum sub array sum problem.
///Here we need find maximum subarray sum in 1D array.

int main()
{
    int mx,n,x,sm;

    while(cin>>n and n)
    {
        mx = sm = 0;

        REP(i,n)
        {
            cin>>x;

            sm += x;

            mx = max(sm,mx);

            if(sm < 0) sm = 0;
        }

        if(mx) printf("The maximum winning streak is %d.\n", mx);
        else pri("Losing streak.");
    }

    return 0;
}

Thursday, March 17, 2016

UVa 10940 - Throwing Cards Away II

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define hi printf("Hello World\n")
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

int ar[5000009];

int main()
{
    int n, idx = 1;

    ar[idx++] = 1;

    int fl = 2, cnt = 2, go = 1;

    while(go < 5000005)
    {
        ar[idx++] = cnt;

        if(cnt==fl) fl*=2, cnt = 0;

        cnt+=2;

        go++;
    }
     while(cin>>n and n)
            printf("%d\n", ar[n]);

    return 0;
}

Wednesday, March 16, 2016

UVa 10935 - Throwing Cards Away I

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n")
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/****/ int cs = 0;
const int INF = 1<<29;
const int MX  = 1e5+10;

int main()
{
    int n,x;

    while(cin>>n and n)
    {
        queue <int> q;

        FOR(i,1,n) q.push(i);

        printf("Discarded cards:");

        while(SZ(q)>1)
        {
            printf(" %d", q.front());
            q.pop();

            x = q.front();
            q.push(x);

            q.pop();

            if(SZ(q) > 1) printf(",");
        }

        printf("\nRemaining card: %d\n", q.front());
    }
    return 0;
}

UVa 119 - Greedy Gift Givers

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n")
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/****/ int cs = 0;
const int INF = 1<<29;
const int MX  = 1e5+10;


int main()
{
    int n,m,tk;
    string s;
    int cnt = 0;

    while(cin>>n)
    {
        vector <string> vs;
        map <string, int > mp;

        REP(i,n)
        {
            cin>>s;
            vs.push_back(s);
            mp[s]=0;
        }

        REP(i,n)
        {
            cin >> s >> tk >> m ;

            if(m==0) continue;

            mp[s] -= m * (tk/m);    //** mp[s] += (tk - tk%m); ??? why gives wa!!

            REP(i,m)
            {
                cin>>s;
                mp[s] += tk/m;
            }
        }

        if(cnt) puts("");
        cnt++;

        REP(i,SZ(vs))
        {
            prii(vs[i], mp[ vs[i] ]);
        }
    }

    return 0;
}

Tuesday, March 15, 2016

UVa 484 - The Department of Redundancy

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/****/ int cs = 0;
const int INF = 1<<29;
const int MX  = 1e5+10;

int main()
{
    int a[MX];
    map<int,int> mp;
    int n, idx = 0;
   
    while(cin>>n)
    {
        if(mp[n]==0)
            a[idx++]=n;
        mp[n]++;
    }

    REP(i,idx)
    {
        prii(a[i],mp[ a[i] ]);
    }

    return 0;
}

UVa 573 - The Snail

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/****/ int cs = 0;
const int INF = 1<<29;
const int MX  = 1e5+10;

int main()
{
    double well,init,climb,slide,fatig;

    while(cin>>well>>climb>>slide>>fatig and well)
    {
        double ht = 0, cnt = 0;

        double ff = climb * (fatig/100);

        while(1)
        {
            cnt++;

            if(climb>=0)
                ht += climb;

            if(ht>well) break;

            ht -= slide;

            climb -= ff;

            if(ht<0) break;
        }

        if(ht>well) printf("success on day %.0lf\n", cnt);
        else printf("failure on day %.0lf\n", cnt);
    }
    return 0;
}

Monday, March 14, 2016

UVa 371 - Ackermann Function

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hii printf("Hello World\n");
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/****/ int cs = 0;
const int INF = 1<<29;
const int MX  = 1e5+10;

int main()
{
    LL lo,hi;
    LL val,tot,mx,ind;

    while(cin>>lo>>hi and lo+hi)
    {
        if(hi < lo) swap(hi,lo);

        mx  = -1;
        LL vv, cnt = 0;

        FOR(i,lo,hi)
        {
            vv = i;
            cnt = 0;

            if(vv == 1)
            {
                cnt = 3;
                if(cnt>mx) mx = cnt, ind = i;
                continue;
            }

            while(vv!=1)
            {
                if(vv%2)
                {
                    vv = 3*vv + 1;
                }
                else
                {
                    vv /= 2;
                }
                cnt++;
            }
            if(cnt>mx) mx = cnt, ind = i;
        }
        printf("Between %lld and %lld, %lld generates the longest sequence of %lld values.\n", lo, hi, ind, mx);
    }
    return 0;
}

Saturday, March 12, 2016

UVa 11650 - Mirror Clock

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

int main()
{
    int T,h,m,ans;

    cin>>T;

    while(T--)
    {
        scanf("%d:%d", &h, &m);

        int tt = h*60 + m;

        ans = 1440 - tt;
        ans %= 720; /// its a 12 hr clock so, mod by 720

        int hh = ans/60, mm = ans%60;
        if(hh == 0) hh+=12;   /// bcoz of 12 hr clock , we dont' have any 0 hour.. we've 12 hr so..

        printf("%02d:%02d\n", hh, mm);
    }
    return 0;
}

Friday, March 11, 2016

UVa 11677 - Alarm Clock

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/****/ int cs = 0;
const int INF = 1<<29;
const int MX  = 1e5+10;

int main()
{
    int h,m,hh,mm;

    while(cin>>h>>m>>hh>>mm and h+hh+m+mm)
    {
        int t = h*60 + m;
        int tt = hh*60 + mm;

        int ans = tt - t;

        if(ans <= 0) ans += 1440;

        ans %= 1440;

        pri(ans);
    }

    return 0;
}

UVa 11321 - Sort! Sort!! Sort!!!

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/****/ int cs = 0;
const int INF = 1<<29;
const int MX  = 1e5+10;

///** in cmp function take care of whats true according to the problem statement, what you wanna sort in ascending order and by default all others are false..

struct data{
    int nmbr;
    int mod;
};

bool cmp(data a, data b)
{
    if(a.mod < b.mod) return true;

    if(a.mod == b.mod)
    {
        if(a.nmbr%2 && b.nmbr%2 && (a.nmbr > b.nmbr)) return true;
        else if(a.nmbr%2==0 && b.nmbr%2==0 && (a.nmbr < b.nmbr)) return true;
        else if(a.nmbr%2 && b.nmbr%2==0) return true;
    }

    return false;
}

int main()
{
    data ar[MX];

    int n,m,x;

    while(cin>>n>>m)
    {
        cout << n << " " << m << "\n";

        if(n+m==0) break;

        REP(i,n)
        {
            cin>>x;
            ar[i].mod = x%m;
            ar[i].nmbr = x;
        }

        sort(ar,ar+n,cmp);

        REP(i,n)
        {
            cout << ar[i].nmbr << "\n";
        }
    }

    return 0;
}

Wednesday, March 9, 2016

UVa 1185 - Big Numbers

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hlw printf("Hello World\n");
#define pcs printf("CASE# %d:\n", ++cs);
#define WRITE(fn) freopen(fn, "w", stdout);
using namespace std;

/****/ int cs = 0;
const int INF = 1<<29;
const int MX  = 1e7+10;

/*
Algorithm:
We know that log(a*b) = log a + log b, so log n! = log 1 + log 2 + ... + log n.
Further more, we can get how many digits a number has by taking logarithm operation with a base of 10.
Also, there's a recursive function that N! = (N-1)! * N.
*/

double ans[MX];

void precal()
{
    ans[1] = log(1);
    FOR(i,2,MX)
    {
        ans[i] = ans[i-1] + log10(i);
    }
    return;
}

int main()
{
    precal();

    int T,x;
    cin>>T;
    while(T--)
    {
        cin>>x;
        printf("%d\n", (int)ans[x] + 1);
    }

    return 0;
}

UVa 637 - Parentheses Balance

//aarifshuvo  ``CSEJU

#include <bits/stdc++.h>
#define ll long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
using namespace std;

int main()
{
    string s;
    int t;
    scanf("%d", &t);
    getchar();
    while(t--)
    {
        getline(cin,s);

        stack<char> st;
        int fl = 0;

        REP(i,SZ(s))
        {
            if(s[i]=='(' or s[i]=='[') st.push(s[i]);
            else if(s[i]==')' or s[i]==']')
            {
                if(SZ(st))
                {
                    if(st.top()=='(' and s[i]==')') st.pop();
                    else if(st.top()=='[' and s[i]==']') st.pop();
                    else fl=1;
                }
                else fl=1;
            }
            if(fl) break;
        }
        if(SZ(st)) fl=1;
        if(fl) puts("No");
        else puts("Yes");
    }

    return 0;
}

UVa 10474 Solution - Where is The Marble

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hlw printf("Hello World\n");
#define pcs printf("CASE# %d:\n", ++cs);
using namespace std;

const int INF = 1<<29;
const int MX  = 1e5+10;

/// using LB function
/// using find() from sorted vector
/// using binary srch

int a[MX];

int main()
{
    int n,q,x,cs=0;

    while(cin>>n>>q and n and q)
    {
        pcs;
        REP(i,n) cin>>a[i];
        sort(a,a+n);

        REP(i,q)
        {
            cin>>x;
            int p = lower_bound(a, a+n, x) - a; ///*** LB Function

            if(a[p] == x)
            {
                printf("%d found at %d\n", x, p+1);
            }
            else
                printf("%d not found\n", x);
        }
    }

    return 0;
}


///** using iterator

int main()
{
    int n,q,x,cs=0;
    vector <int> vi;

    while(cin>>n>>q and n+q)
    {
        vi.clear();

        REP(i,n) cin>>x, vi.push_back(x);

        sort(ALL(vi));

        pcs;

        REP(i,q)
        {
            cin>>x;

            vector<int> :: iterator it = find(ALL(vi),x);       ///*** it to find a char

            if(it == vi.end()) printf("%d not found\n", x);     ///*** using method
            else
            {
                printf("%d found at %d\n", x, it - vi.begin()+1);   ///***  it - vectorer shuru + 1
            }
        }
    }

    return 0;
}


///** using binary search

int main()
{
    int n,q,x,cs=0;
    vector <int> a;
    while(cin>>n>>q and n and q)
    {
        a.clear();
        pcs;
        REP(i,n) cin>>a[i];
        REP(i,n) cin>>x, a.push_back(x);
        sort(ALL(a));

        REP(i,q)
        {
            cin>>x;

            int mid, lo = 0, hi = n-1, found = 0;

            while(lo <= hi)
            {
                mid = (lo+hi) / 2;
                if(x == a[mid])
                {
                    found = 1;
                    break;
                }
                else if(x > a[mid]) lo = mid + 1;
                else if(x < a[mid]) hi = mid - 1;
            }

            if(found)
            {
                while(x == a[mid]) mid--;
                printf("%d found at %d\n", x, mid+2);
            }
            else printf("%d not found\n", x);
        }
    }
    return 0;
}

UVa 12554 Solution - A Special Happy Birthday Song

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define WRITE(fn) freopen(fn, "w", stdout);
#define hi printf("Hello World\n");
using namespace std;

/***/  int cs = 0;
const int INF = 1<<29;
const int MX  = 1e5+10;

int main()
{
    int n;
    string sa[] = {"Happy", "birthday", "to", "you", "Happy", "birthday", "to", "you", "Happy", "birthday", "to", "Rujia", "Happy", "birthday", "to", "you" };
    string sb[12345];

    while(cin>>n)
    {
        if(n<=16)
        {
            REP(i,n)
            {
                cin>>sb[i];
            }
            int j = 0;
            REP(i,16)
            {
                cout << sb[j++] << ": " << sa[i] <<"\n";
                if(j==n) j=0;
            }
        }
        else
        {
            REP(i,n)
            {
                cin>>sb[i];
            }
            int j = 0, i = 0, idx = 0;
            for( ; ; )
            {
                idx++;
                cout << sb[i++] << ": " << sa[j++] <<"\n";
                if(j==16) j=0;
                if(i==n)  i=0;
                if(idx>=(n-1) and idx%16==0) break;
            }
        }
    }
    return 0;
}

Tuesday, March 8, 2016

UVa 10494 Solution - If We Were Child Again

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
using namespace std;

const int INF = 1<<29;
const int MX  = 1e5+10;

string div(string s, LL n)
{
    LL rem = 0, fl = false;
    string an = "";
    REP(i,SZ(s))
    {
        rem = s[i]-48 + 10*rem;
        if(rem/n) fl=true;
        if(fl) an+=(rem/n + 48);
        rem %= n;
    }
    if(!fl) an+="0";
    return an;
}

LL rem(string s, LL n)
{
    LL r = 0;
    REP(i,SZ(s))
    {
        r = s[i]-48 + 10*r;
        r %= n;
    }
    return r;
}

int main()
{
    string s;
    LL n;
    char ch;

    while(cin>>s>>ch>>n)
    {
        if(ch=='/')
        {
            pri(div(s,n));
        }else
        {
            pri(rem(s,n));
        }
    }
    return 0;
}

UVa 10341 Solution - Solve It

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hlw printf("Hello World\n");
using namespace std;

const int INF = 1<<29;
const int MX  = 1e5+10;

double p,q,r,s,t,u;

double f(double x)
{
    return p * exp(-x) + q*sin(x) + r*cos(x) + s*tan(x) + t * x * x + u;
}

double bisection()
{
    double hi = 1, lo = 0;

    while(lo+1e-7 < hi)
    {
        double mid = (lo + hi) / 2;

        if(f(lo) * f(mid) <= 0)
        {
            hi = mid;
        }
        else
        {
            lo = mid;
        }
    }
    return (lo + hi) / 2;
}

int main()
{
    while(cin>>p>>q>>r>>s>>t>>u)
    {
        if(f(0) * f(1) > 0)
        {
            printf("No solution\n");
        }
        else
        {
            printf("%.4lf\n", bisection());
        }
    }

    return 0;
}

UVa 272 - TEX Quotes

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define priii(a,b,c) cout<<a<<" "<<b<< " " <<c << endl
#define hi printf("Hello World\n");
using namespace std;

const int INF = 1<<29;
const int MX  = 1e5+10;

int main()
{
    string s;
    int cnt = 0;
    while(getline(cin,s))
    {
        REP(i,SZ(s))
        {
            if(s[i]=='"')
            {
                cnt++;
                if(cnt%2)  printf("``");
                else printf("''");
            }
            else
            printf("%c", s[i]);
        }
        puts("");
    }
    return 0;
}

UVa 455 Solution - Periodic Strings

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
using namespace std;

const int INF = 1<<29;
const int MX  = 500+10;

int main()
{
    int T;
    string s;
    cin>>T;
    while(T--)
    {
        cin>>s;
        FOR(i,1,SZ(s))
        {
            string con = "";
            string prt = s.substr(0,i);

            REP(i,SZ(s)/SZ(prt))
            {
                con += prt;
            }

            if(con==s)
            {
                pri(SZ(prt));
                break;
            }
        }
        if(T) puts("");
    }
    return 0;
}

UVa 12503 - Robot Instructions

#include <bits/stdc++.h>
#define LL long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
using namespace std;

const int INF = 1<<29;
const int MX  = 1e4+10;

int main()
{
    int T,n,x,pos;
    string s,sa[MX];
    cin>>T;
    while(T--)
    {
        pos = 0;
        cin>>n;
        FOR(i,1,n)
        {
            cin>>s;
            if(s=="LEFT") pos--,sa[i]="LEFT";
            else if(s=="RIGHT") pos++,sa[i]="RIGHT";
            else
            {
                cin>>s;
                cin>>x;

                if(sa[x]=="LEFT") pos--,sa[i]="LEFT";
                else if(sa[x]=="RIGHT") pos++,sa[i]="RIGHT";
            }
        }
        pri(pos);
    }
    return 0;
}

Monday, March 7, 2016

UVa 499 - What's The Frequency, Kenneth?

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
using namespace std;

const int INF = 1<<29;

const int MX  = 1e5+10;

struct data{

    int pos;
    int cnt;
};

bool cmp(data a, data b)

{
    if(a.cnt != b.cnt)
        return a.cnt > b.cnt;
    else
        return a.pos < b.pos;
}


int main()

{
    data a[MX];
    string s;
    while(getline(cin,s))
    {
        REP(i,125)
        {
            a[i].pos = i;
            a[i].cnt = 0;
        }
        REP(i,SZ(s))
        {
            if(isalpha(s[i])) a[s[i]].cnt++;
        }
       
        sort(a,a+125,cmp);
        LL mn = a[0].cnt;
        REP(i,125)
        {
            if(a[i].cnt != mn) break;
            putchar(a[i].pos);
        }
        cout << " " << mn << "\n";
    }

    return 0;

}

UVa 19558 Solution - Coming Home

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
#define pcs printf("Case %d: ", ++cs);
using namespace std;

const int INF = 1<<29;
const int MX  = 500+10;

int main()
{
    int mnt,n,T,sth,stm,edh,edm,tmi,tmf,cs=0;
    char ch;
    cin>>T;
    vector <int> vec;
    while(T--)
    {
        vec.clear();
        cin>>n;
        cin >> sth >> ch >> stm;
        tmi = stm + sth*60;
        while(n--)
        {
            cin >> edh >> ch >> edm;
            cin >> mnt;
            tmf = edm + edh*60;
            if(tmf<tmi) tmf+=1440;
            tmf = tmf + mnt - tmi;
            vec.push_back(tmf);
        }
        sort(ALL(vec));
        printf("Case %d: ", ++cs);
        pri(vec[0]);
    }
    return 0;
}

Friday, March 4, 2016

UVa 10338 - Mischievous Children

#include <bits/stdc++.h>
#define LL  long long
#define SZ(x) ((int)(x).size())
#define ALL(x) (x).begin(),(x).end()
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define priii(a,b,c) cout<<a<<" "<<b<< " " <<c << endl
#define hi printf("Hello World\n");
using namespace std;

const int INF = 1<<29;
const int MX  = 1e5+10;

/// how many ways can the chars of a string be rearranged including its own arrangement?? 
/// total str size's factorial / (product of all repetitive chars' individual factorial)

LL fact[25];

void f()
{
    fact[0]=1;
    FOR(i,1,22)
    {
        fact[i]=fact[i-1]*i;
    }
}

int main()
{
    f();

    int T,cs=0;
    string s;
    cin>>T;
    while(T--)
    {
        cin>>s;

        int a[26]={0};  ///*

        REP(i,SZ(s))
        {
            a[ s[i]-'A']++;
        }

        LL ways = fact[SZ(s)];

        REP(i,26) ways /= fact[a[i]];

        printf("Data set %d: ", ++cs);
        pri(ways);
    }
        return 0;
}

Thursday, March 3, 2016

UVa 12439 / LightOJ 1414 Solution - February 29

#include <bits/stdc++.h>
#define LL  long long
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
#define priii(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define hi printf("Hello World\n");
using namespace std;

const int INF = 1<<29;
const int MX  = 1e5+10;

int main()
{
    string mnth[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

    string m1,m2;
    LL T,d1,d2,y1,y2;
    char ch;

    map <string, int> mp;

    REP(i,12)  mp[mnth[i]] = i;

    cin>>T;

    FOR(i,1,T)
    {
        cin>>m1>>d1>>ch>>y1;
        cin>>m2>>d2>>ch>>y2;

        if(mp[m1] > 1) y1++;  
        /// if first month greater than february, then we don't need that yr, can subtract that
      
       if(mp[m2] == 0 or (mp[m2]==1 and d2<29)) y2--;  
      ///if last mnth less than feb 29, then we don't need that yr, subtract also

        LL ans = y2/4 - (y1-1)/4;
        ans -= y2/100 - (y1-1)/100;
        ans += y2/400 - (y1-1)/400;

        printf("Case %d: %lld\n", i, ans);
    }
    return 0;
}