Pages

রবিবার, ৫ জানুয়ারি, ২০১৪

solution code of uva 10044

 #include <vector>
#include <string>
#include <sstream>
#include <stdio.h>      /* printf */
#include <stdlib.h>     /* abs */
#include <cmath>
#include <map>
#include <queue>
#include <functional>
#include <sstream>
#include <vector>
#include<algorithm>
#include<iostream>
using namespace std;
map<string,int>ErdosNumbers;
vector<string> extract_names(string &line)
{
    vector<string>list;
    string::size_type begin(0);
    string::size_type end=line.find(".,",begin);
    while(end!=string::npos)
    {
        list.push_back(line.substr(begin,end-begin+1));
        begin=end+3;
        end=line.find(".,",begin);
    }
    if(begin<line.size()-1)
        list.push_back(line.substr(begin));
    return list;
}
int main()
{
    //freopen("c:\\temp\\in.txt","r",stdin);
    int scenario;
    scanf("%d",&scenario);
    for(int sc=1;sc<=scenario;sc++)
    {
       int p,n;
       scanf("%d %d",&p,&n);
        cin.ignore();
        vector<string>authors;
        map<string,vector<string> >CoAuthors;
        for(int i=0;i<p;i++)
        {
           string data,names;
           getline(cin,data);
           stringstream ss(data);
           getline(ss,names,':');
           authors=extract_names(names);
           for(int i=0;i<authors.size();i++)
            ErdosNumbers[authors[i]]=-1;
           for(int i=0;i<authors.size();i++)
           {
               for(int j=0;j<authors.size();j++)
               {
                   if(authors[i]!=authors[j])
                   {
                        if(find(CoAuthors[authors[i]].begin(),CoAuthors[authors[i]].end(),authors[j]) == CoAuthors[authors[i]].end())
                           CoAuthors[authors[i]].push_back(authors[j]);
                   }
               }
           }
        }
        vector<string>find_name;
        string name;
        for(int i=0;i<n;i++)
        {
            getline(cin,name);
            find_name.push_back(name);
        }
        ErdosNumbers["Erdos, P."]=0;
        for(int i=0;i<CoAuthors["Erdos, P."].size();i++)
         ErdosNumbers[CoAuthors["Erdos, P."][i]]=1;
      vector<string>pre_l;
      pre_l=CoAuthors["Erdos, P."];
      while(!pre_l.empty())
      {
          vector<string>new_l;
          for(int i=0;i<pre_l.size();i++)
          {
               for(int j=0;j<CoAuthors[pre_l[i]].size();j++)
               {
                   if(ErdosNumbers[CoAuthors[pre_l[i]][j]]==-1)
                   {
                      ErdosNumbers[CoAuthors[pre_l[i]][j]]=1+ErdosNumbers[pre_l[i]];
                      new_l.push_back(CoAuthors[pre_l[i]][j]);
                   }
               }
          }
          pre_l=new_l;
      }
//      for(map<string,int>::iterator it=ErdosNumbers.begin();it!=ErdosNumbers.end();it++)
//      {
//          cout<<it->first<<" "<<it->second<<endl;
//      }
        printf("Scenario %d\n",sc);
        for(int i=0;i<n;i++)
        {
            cout<<find_name[i]<<" ";
            map<string,int>::iterator it=ErdosNumbers.find(find_name[i]);
            if(it==ErdosNumbers.end() || it->second==-1)
                printf("infinity\n");
             else cout<<it->second<<endl;
        }
    }
    return 0;
}

শুক্রবার, ৩ জানুয়ারি, ২০১৪

Solution code of uva 928-Eternal truth


#include<cstdio>
#include<iostream>
#include<cstring>
#include<iostream>
#include<queue>
#include<vector>
#include<stack>
#define pa pair<int,int>
#define inf 0x7fffffff
using namespace std;
int row,col,sor_x,sor_y,end_x,end_y;
int main()
{
  // freopen("c:\\temp\\in.txt","r",stdin);
 int test_case;
 scanf("%d",&test_case);
 int a_x[]={-1,1,0,0};
 int a_y[]={0,0,1,-1};
 while(test_case--)
 {
      char data[301][301];
     int visit[301][301][4];
       scanf("%d %d",&row,&col);
     for(int i=1;i<=row;i++)
     {
         for(int j=1;j<=col;j++)
         {
             cin>>data[i][j];
             if(data[i][j]=='S')
                sor_x=i,sor_y=j;
             if(data[i][j]=='E')
                end_x=i,end_y=j;
                visit[i][j][0]=visit[i][j][1]=visit[i][j][2]=visit[i][j][3]=inf;
         }
     }
     queue< pair<pa,int> >my;
     my.push(make_pair(make_pair(sor_x,sor_y),0));
     visit[sor_x][sor_y][0]=0;
     int found=0;
     int p;
     int next_x,next_y;

     while(!my.empty() && !found)
     {
         int r=my.front().first.first;
         int c=my.front().first.second;
         int jump=my.front().second;
           p=jump%3+1;
           my.pop();
         for(int i=0;i<4;i++)
         {
             next_x=r+a_x[i]*p;
             next_y=c+a_y[i]*p;
            if(next_x>=1 && next_x<=row && next_y>=1 && next_y<=col && data[next_x][next_y]!='#' && visit[next_x][next_y][p]==inf)
            {
                int check=1;
                for(int t=1;t<=p && check;t++)
                {
                      if(data[r+a_x[i]*t][c+a_y[i]*t]=='#')
                        check=0;
                }
                if(check)
                {
                      visit[next_x][next_y][p]=visit[r][c][jump]+1;
                       my.push(make_pair(make_pair(next_x,next_y),p));
                if(next_x== end_x && next_y==end_y)
                    {
                        found=true;break;
                    }

                }
            }
         }
    }
    if(!found)
        cout<<"NO\n";
    else cout<<visit[next_x][next_y][p]<<endl;
 }
 return 0;
}

বৃহস্পতিবার, ২ জানুয়ারি, ২০১৪

Solution code of uva 924


 #include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#include<stack>
using namespace std;
int main()
{
    //freopen("c:\\temp\\in.txt","r",stdin);
    int employe;
    while(scanf("%d",&employe)==1)
    {
        vector<int>graph[2501];
        for(int i=0;i<employe;i++)
        {
            int num;
            scanf("%d",&num);
            for(int j=1;j<=num;j++)
            {
               int c;
               cin>>c;
               if(i!=c)
               graph[i].push_back(c);

            }
        }
        int test_case;
        scanf("%d",&test_case);
        while(test_case--)
        {
            int source;
            scanf("%d",&source);
            queue<int>q;
            q.push(source);
            int visit[2501];
            memset(visit,0,sizeof visit);
            int coun[2501];
            memset(coun,0,sizeof visit);
            visit[source]=1;
            int boom_size=0,first_day;
            while(!q.empty())
            {
                int pop=q.front();q.pop();
                for(int i=0;i<graph[pop].size();i++)
                {
                    int v=graph[pop][i];
                     if(visit[v]==0)
                     {
                         visit[v]=visit[pop]+1;
                         q.push(v);
                         coun[visit[v]]=coun[visit[v]]+1;
                         if(boom_size<coun[visit[v]])
                         {
                             boom_size=coun[visit[v]];
                             first_day=visit[v];
                         }
                     }
                }
            }
            if(graph[source].size()<1)
                cout<<0;
            else cout<<boom_size<<" "<<first_day-1;
            cout<<endl;
        }
    }
    return 0;
}