2015年7月28日 星期二

[UVA] 401 - Palundromes

/* 20150728
 * hanting
 * UVa 401 - Palundromes
 * C++
 */
#include <iostream>
#include <algorithm>
using namespace std;
string Charactor="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
string mirror   ="A   3  HIL JM O   2TUVWXYZ1SE Z  8 ";
string Mirror(string str)
{
    for(int i=0;i<str.size();i++)
    {
        int pos=Charactor.find(str[i]);
        str[i]=mirror[pos];
    }
    return str;
}
int main()
{
    string str;
    while(cin>>str)
    {
        string rstr=str;
        reverse(rstr.begin(),rstr.end());
        bool mirrored=false,palindrome=false;
        if(str==rstr) palindrome=true;
        if(Mirror(str)==rstr) mirrored=true;

        if(palindrome and mirrored)
        {
            cout<<str<<" -- is a mirrored palindrome."<<endl;
        }
        else if(palindrome)
        {
            cout<<str<<" -- is a regular palindrome."<<endl;
        }
        else if(mirrored)
        {
            cout<<str<<" -- is a mirrored string."<<endl;
        }
        else
        {
            cout<<str<<" -- is not a palindrome."<<endl;
        }
        cout<<endl;
    }

    return 0;
}

2015年7月4日 星期六

[UVA] 111 - History Grading

/* 20150704
 * hanting
 * [UVA] 111 -  History Grading
 *
 */
#include <iostream>
#include <sstream>
using namespace std;

int N;//event_num
istream& operator>>(istream& in,int *arr)
{
    string str;
    getline(in,str);
    stringstream sin(str);
    for(int i=1;i<=N;i++)//輸入1 3 4 2 表示順序為 event1,event4,event2,event3
    {
        int tmp;
        sin>>tmp;
        arr[tmp]=i;
    }
    return in;
}
int LCS(int *a,int *b)
{
    int table[N+1][N+1];
    fill(table[0],table[0]+(N+1)*(N+1),0);
    for(int i=1;i<=N;i++)
    {
        for(int j=1;j<=N;j++)
        {
            if(a[i]==b[j])
            {
                table[i][j]=table[i-1][j-1]+1;
            }
            else
            {
                table[i][j]=max(table[i-1][j],table[i][j-1]);
            }
        }
    }
    return table[N][N];
}
int main()
{
    cin>>N;
    cin.get();
    int ans[N+1];
    cin>>ans;
    int student[N+1];
    while(cin>>student)
    {
        int lcs=LCS(ans,student);
        cout<<lcs<<endl;
    }
    return 0;
}

2015年7月2日 星期四

[UVA] 540 - Team Queue

/* 20150702
 * hanting
 * [UVA] 540 - Team Queue
 *
 */
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main()
{
    int N;
    int Sce=0;
    while(cin>>N and N)
    {
        cout<<"Scenario #"<<++Sce<<endl;
        map<int,int> team;
        vector<int> List[N];
        for(int i=0;i<N;i++)
        {
            int num;
            cin>>num;
            for(int j=0;j<num;j++)
            {
                int tmp;
                cin>>tmp;
                team[tmp]=i;//輸入的數字在哪一個team
            }
        }
        string str;
        vector<int> order;//team排隊的順序
        int x=0;
        int dex=0;
        while(cin>>str and str!="STOP")
        {
            if(str=="ENQUEUE")
            {
                int enqueueNum;
                cin>>enqueueNum;
                int TeamOfNum=team[enqueueNum];
                if(List[TeamOfNum].size()==0)
                {
                    order.push_back(TeamOfNum);
                }
                List[TeamOfNum].push_back(enqueueNum);//插入team中
            }
            else if(str=="DEQUEUE")
            {
                int tmp=order[dex];
                cout<<List[tmp][0]<<endl;
                List[tmp].erase(List[tmp].begin());
                if(List[tmp].size()==0) dex++;
            }
        }
        cout<<endl;
    }
    return 0;
}

2015年5月25日 星期一

[UVA] 10057 - A mid-summer night's dream.

/*20150525 hanting*/
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int N;
    while(cin>>N)
    {
        int arr[N];
        for(int i=0;i<N;i++)
        {
            cin>>arr[i];
        }
        sort(arr,arr+N);
        int A1=arr[(N-1)/2] , A2=arr[(N-1)/2+1];
        int Count=0,possibleA;
        if(N&1)
        {
            for(int i=0;i<N && arr[i]<=A2;i++)
            {
                Count+=(arr[i]==A1);
            }
            possibleA=1;
        }
        else
        {
            for(int i=0;i<N && arr[i]<=A2;i++)
            {
                Count+=(arr[i]==A1||arr[i]==A2);
            }
            possibleA=A2-A1+1;
        }
        cout<<A1<<" "<<Count<<" "<<possibleA<<endl;
    }
    return 0;
}

2015年5月23日 星期六

[UVA] 10474 - Where is the Marble?

/*20150523 hanting*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    int N,Q;
    int Case=1;
    while(cin>>N>>Q && N+Q)
    {
        vector<int> vec;
        for(int i=0;i<N;i++)
        {
            int temp;
            cin>>temp;
            vec.push_back(temp);
        }
        sort(vec.begin(),vec.end());
        cout<<"CASE# "<<Case++<<":"<<endl;
        for(int i=0;i<Q;i++)
        {
            int temp;
            cin>>temp;
            vector<int>::iterator it=find(vec.begin(),vec.end(),temp);
            if(it!=vec.end())
            {
                cout<<temp<<" found at "<<it-vec.begin()+1<<endl;
            }
            else
            {
                cout<<temp<<" not found"<<endl;
            }
        }
    }
    return 0;
}

[UVA] 11063 - B2-Sequence

/*20150523 hanting*/
#include <iostream>
using namespace std;
int main()
{
    int N;
    int times=1;
    while(cin>>N)
    {
        bool B2=true;
        bool Num[20002]={false};
        int arr[N];
        int temp;
        for(int i=0;i<N;i++)
        {
            cin>>arr[i];
            if(arr[i]<1) B2=false;
            else if(i!=0 && arr[i]<=temp) B2=false;
            temp=arr[i];
        }
        for(int i=0;i<N && B2;i++)
        {
            for(int j=i;j<N && B2;j++)
            {
                int sum=arr[i]+arr[j];
                if(Num[sum]==false) Num[sum]=true;
                else B2=false;
            }
        }
        cout<<"Case #"<<times++<<": ";
        if(B2) cout<<"It is a B2-Sequence."<<endl;
        else cout<<"It is not a B2-Sequence."<<endl;
        cout<<endl;
    }
    return 0;
}

2015年5月21日 星期四

[UVA] 10409 - Die Game

/*20150521 hanting*/
#include <iostream>
using namespace std;
void change(int* arr,int a,int b,int c,int d)//a << b << c << d << a ...
{
    int temp=arr[a];
    arr[a]=arr[b];
    arr[b]=arr[c];
    arr[c]=arr[d];
    arr[d]=temp;
}
int main()
{
    int N;
    while(cin>>N && N)
    {
        string cmd[N];
        for(int i=0;i<N;i++)
        {
            cin>>cmd[i];
        }
        int arr[6]={1,2,3,5,4,6};//上北西南東下
        for(int i=0;i<N;i++)
        {
            if(cmd[i]=="north")
            {
                change(arr,0,3,5,1);
            }
            else if(cmd[i]=="south")
            {
                change(arr,0,1,5,3);
            }
            else if(cmd[i]=="east")
            {
                change(arr,0,2,5,4);
            }
            else
            {
                change(arr,0,4,5,2);
            }
        }
        cout<<arr[0]<<endl;
    }
    return 0;
}