Saturday, September 17, 2016

UVA 118 - Mutant Flatworld Explorers

#include<bits/stdc++.h>
using namespace std;
bool destination, flg[100][100];
int nx , ny, row , col;
char orientation;
void process(char x)
{
if(orientation == 'S' && x == 'R')orientation = 'W';
else if(orientation == 'S' && x == 'L')orientation = 'E';
else if(orientation == 'N' && x == 'R')orientation = 'E';
else if(orientation == 'N' && x == 'L')orientation = 'W';
else if(orientation == 'E' && x == 'R')orientation = 'S';
else if(orientation == 'E' && x == 'L')orientation = 'N';
else if(orientation == 'W' && x == 'R')orientation = 'N';
else if(orientation == 'W' && x == 'L')orientation = 'S';
if(x == 'F'){
switch(orientation){
case 'N':
if(row == ny && flg[nx][ny])break;
else if(row == ny && !flg[nx][ny]){
flg[nx][ny] = true;
cout<<nx<<' '<<ny<<' '<<orientation<<" LOST\n";
destination = true;
break;
}
ny++;
break;
case 'S':
if(ny == 0 && flg[nx][ny])break;
else if(ny == 0 && !flg[nx][ny]){
flg[nx][ny] = true;
cout<<nx<<' '<<ny<<' '<<orientation<<" LOST\n";
destination = true;
break;
}
ny--;
break;
case 'E':
if(col == nx && flg[nx][ny])break;
else if(col == nx && !flg[nx][ny]){
flg[nx][ny] = true;
cout<<nx<<' '<<ny<<' '<<orientation<<" LOST\n";
destination = true;
break;
}
nx++;
break;
case 'W':
if(nx == 0 && flg[nx][ny])break;
else if(nx == 0  && !flg[nx][ny]){
flg[nx][ny] = true;
cout<<nx<<' '<<ny<<' '<<orientation<<" LOST\n";
destination = true;
break;
}
nx--;

}
}
}

int main()
{
memset(flg,false,sizeof flg);
cin>>col>>row;
while(cin>>nx>>ny>>orientation){
char com[100];
cin>>com;
destination = false;
for(int i = 0; com[i] && !destination; i++){
process(com[i]);
}
if(!destination)cout<<nx<<' '<<ny<<' '<<orientation<<'\n';
}

return 0;
}

Wednesday, September 7, 2016

UVA 572 - Oil Deposits

#include<bits/stdc++.h>
using namespace std;
int m , n , cnt;
vector<string>v;
string s;
bool vis[100][100];
int nx[8] = {1,1,1,-1,-1,-1,0,0};
int ny[8] = {1,0,-1,1,0,-1,1,-1};
void dfs(int start , int end)
{
vis[start][end] = 1;
int row , col;
for(int i=0; i<8; i++){
row = start + nx[i];
col = end + ny[i];
if(row >=0 && row<m && col>=0 && col<n && !vis[row][col]){
vis[row][col] = 1;
if(v[row][col] == '@')dfs(row,col);
}
}
}

int main()
{
while(cin>>m>>n && m){
v.clear();
for(int i=0; i<m; i++){
cin>>s;
v.push_back(s);
}
        cnt = 0;
        memset(vis,0,sizeof(vis));
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
if(!vis[i][j]){
vis[i][j] = true;
if(v[i][j] == '@'){cnt++; dfs(i,j);}
}
}
}
cout<<cnt<<'\n';
}

return 0;
}

Monday, August 22, 2016

Uva 10004 - Bicoloring

#include<bits/stdc++.h>
using namespace std;
vector<int>adj[1000];
queue<int>q;
int color[1000] , visited[1000];
bool isBipertite(int s)
{
     memset(color,-1,sizeof(color));
     color[s] = 1;
    while(!q.empty())
    {
        q.pop();
    }
    int fr;
    q.push(s);
    memset(visited,0,sizeof(visited));
    visited[s] = 1;
    while(!q.empty()){
        fr = q.front();
        q.pop();
        for(int k=0; k<adj[fr].size(); k++){
            if(visited[adj[fr][k]]==0 && color[adj[fr][k]]==-1){
                 q.push(adj[fr][k]);
                visited[adj[fr][k]] = 1;
                color[adj[fr][k]] = 1 - color[fr];
            }
        }
        for(int i=0; i<adj[fr].size(); i++){
            if(visited[adj[fr][i]]==1 && color[adj[fr][i]] == color[fr]) return false;
        }
    }

   return true;
}
int main()
{
     int node  , e;
     while(cin>>node &&node){
        cin>>e;
        memset(adj,0,sizeof (adj));
        for(int i=0; i<e; i++){
            int u , v;
            cin>>u>>v;
            adj[u].push_back(v);
        }
        isBipertite(0) ? cout<<"BICOLORABLE.\n" : cout<<"NOT BICOLORABLE.\n";
     }

    return 0;
}

Thursday, August 4, 2016

UVA 12555 - Baby Me

#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(0)
using namespace std;
int main()
{
    FAST;
    double a , b , t,kase = 0;
    string s="";
    cin>>t;
    while(t--){
        cin>>a>>s;
        b = s.size() > 3 ?  s[3] - '0' : 0;
        cout << "Case " << ++kase << ": " << a * 0.5 + b * 0.05 << '\n';
    }
    return 0;
}

Sunday, July 31, 2016

UVA 401 - Palindromes

#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(0)
using namespace std;
int main()
{
    FAST;
    string t , s ;
    while(cin>>t){
        bool pal = false , mir = false;
         s = t;
        int last = t.size()-1;
        int len = t.size()-1;
        if(t.size() == 1){
         pal = true;
            if(s[0] == 'A' ) mir = true;
          //  else if(s[0] == 'E' ) mir = true;
           else if(s[0] == 'H' ) mir = true;
           else if(s[0] == 'I' ) mir = true;
          // else if(s[0] == 'J' ) mir = true;
         // else if(s[0] == 'L' ) mir = true;
           else if(s[0] == 'M' ) mir = true;
           else if(s[0] == 'O' ) mir = true;
         // else  if(s[0] == 'S' ) mir = true;
          else  if(s[0] == 'T' ) mir = true;
          else  if(s[0] == 'U' ) mir = true;
          else  if(s[0] == 'V' ) mir = true;
          else  if(s[0] == 'W' ) mir = true;
          else  if(s[0] == 'X' ) mir = true;
          else  if(s[0] == 'Y' ) mir = true;
          // else if(s[0] == 'Z' ) mir = true;
          else  if(s[0] == '1' ) mir = true;
          // else if(s[0] == '2' ) mir = true;
          // else if(s[0] == '3' ) mir = true;
         // else  if(s[0] == '5' ) mir = true;
           else if(s[0] == '8' ) mir = true;
          else mir = false;
        }
        else {
        reverse(t.begin() , t.end());
        if(s == t) pal = true;
        for(int i = 0; i < len ; i++){
            if(s[i] == 'A' && s[last] == 'A' ) mir = true;
          else  if(s[i] == 'E' && s[last] == '3' ) mir = true;
         else  if(s[i] == 'H' && s[last] == 'H' ) mir = true;
         else   if(s[i] == 'I' && s[last] == 'I' ) mir = true;
        else  if(s[i] == 'J' && s[last] == 'L' ) mir = true;
         else   if(s[i] == 'L' && s[last] == 'J') mir = true;
         else  if(s[i] == 'M' && s[last] == 'M') mir = true;
         else  if(s[i] == 'O' && s[last] == 'O' ) mir = true;
         else   if(s[i] == 'S' && s[last] == '2' ) mir = true;
         else if(s[i] == 'T' && s[last] == 'T' ) mir = true;
        else  if(s[i] == 'U' && s[last] == 'U' ) mir = true;
         else   if(s[i] == 'V' && s[last] == 'V' ) mir = true;
        else   if(s[i] == 'W' && s[last] == 'W' ) mir = true;
       else  if(s[i] == 'X' && s[last] == 'X' ) mir = true;
          else  if(s[i] == 'Y' && s[last] == 'Y') mir = true;
         else  if(s[i] == 'Z' && s[last] == '5' ) mir = true;
         else   if(s[i] == '1' && s[last] == '1' ) mir = true;
        else if(s[i] == '2' && s[last] == 'S' ) mir = true;
        else if(s[i] == '3' && s[last] == 'E' ) mir = true;
        else if(s[i] == '5' && s[last] == 'Z' ) mir = true;
          else if(s[i] == '8' && s[last] == '8') mir = true;
           else mir = false;
           if(mir == false) break;
         // if(i == last)break;
            last--;
        }
        }
        if(!pal && !mir)cout<<s<<" -- is not a palindrome.\n";
        else if(pal && !mir)cout<<s<<" -- is a regular palindrome.\n";
        else if(pal && mir)cout<<s<<" -- is a mirrored palindrome.\n";
        else if(!pal && mir)cout<<s<<" -- is a mirrored string.\n";
        cout<<"\n";
    }

    return 0;
}

Friday, July 29, 2016

UVA 11677 - Alarm Clock

#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(0)
using namespace std;
int main()
{
    FAST;
    int h1, m1, h2, m2;
    while(cin>>h1>>m1>>h2>>m2 ){
        if(!h1 && !m1 && !h2 && !m2)break;
        int start = h1*60 + m1;
        int ending = h2*60 + m2;
        if(start < ending)cout<<ending - start<<'\n';
        else if(start == ending )cout<<0<<'\n';
        else cout<<(24*60) - start + ending<<'\n';
    }
    return 0;
}

Wednesday, July 27, 2016

UVA 579 - Clock Hands

#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(0)
#define dbug(x) cout<<x<<" "
using namespace std;
int main()
{
    //FAST;
    int hour , minute ;
    double total , h_angle , m_angle;
    while(scanf("%d:%d",&hour,&minute)== 2){
        if(!hour  && !minute)break;
        m_angle = minute/5.0*30.0;
        h_angle = hour*30.0 + minute*30.0/60.0;
        total = fabs(h_angle - m_angle);
        if(total > 180.0 ) total = 360.0 - total;
        printf("%.3f\n",total);
    }
    return 0;
}