toj 1721 Friends
Total Runs: 80 Accepted Runs: 14
You know this problem... several friends meet at the Hacienda (a rather fine restaurant) every Wednesday,have some drinks and fun in general until someone brings up the dreaded question: "So, where are we going tonight?"
At this point basically two things can happen: Either take the Swedish solution or the Italian solution. The Swedish solution means that there is an absolutely embarrassing silence for about five minutes disturbed only once or twice by a muttered "Uh, I don't care...", then they finally agree (silently of course) to get totally drunk. The Italian solution includes (but is not limited to) lots of shouting, total mayhem in the Hacienda, and probably 'family' problems.
But wait, yes - you are right. We are in Germany, so our friends will take the German solution, of course.That means: Voting!
As you can imagine, the friends do not just vote for a certain place to go to depending on their current mood.It really depends much more on who is there on a given Wednesday. Here are the rules:
1. Anne will always vote for going to the cinema.
2. Bob will vote for going to the disco if Karin is there, too.
3. Karin will vote for going to the disco if Charly is there, if Charly is not there but Anne is, Karin will vote for going to the cinema, if Charly and Anne are not there Karin will vote for going to the cocktail bar.
4. Dave is one of those guys who never votes for anything.
5. If Dave is there, Bob will vote for going to the cocktail bar.
6. If Charly and Anne are there, both of them will vote for going to the cinema.
7. Edward votes for going to the cocktail bar if Anne is there and Charly is not there, otherwise Edward votes for going to the cinema.
8. If Edward is there, Bob will vote for going to the cocktail bar.
9. Frank will vote for going to the cinema if neither Bob nor Anne are there, and Frank will vote for going to the disco if Anne is there.
10. If Anne is not there, Bob will vote for going to the cocktail bar.
For a given Wednesday, count the votes for each place from the friends who are there on that Wednesday.If no rule applies for a present friend or if several rules apply and require the friend to vote for different places, this friend abstains from voting on that Wednesday.
InputThe first line contains the number of scenarios (Wednesday meetings).
For each scenario, there is one line containing the names of the present friends. Names are separated by single blanks and consist of letters only. The same name will not occur more than once on the same line.
OutputThe output for every scenario begins with a line containing "Scenario #i:", where i is the number of the scenario starting at 1.
Then for each scenario print a single line containing the place that received the most votes. Possible places are 'cinema', 'cocktail bar', and 'disco'. If none of those places receives more votes than the other two print 'stay at the Hacienda'.
Terminate the output for the scenario with a blank line.
Sample Input
2 Frank Dave Karin Frank
Sample Output
Scenario #1: cinema Scenario #2: stay at the Hacienda
Source: TUD Programming Contest 2003
#include <string>
#include <map>
using namespace std;
map<string,int>M;
bool mark[8];
int a,b,c;
int main()
{
M["Anne"]=1;
M["Bob"]=2;
M["Karin"]=3;
M["Charly"]=4;
M["Dave"]=5;
M["Edward"]=6;
M["Frank"]=7;
int t,len,i,zz=1;
cin>>t;
getchar();
string str,temp;
while(t--)
{
getline(cin,str,'\n');
len=str.length();
str+=' ';
int starti=0;
for(i=1;i<=7;i++)
mark[i]=false;
for(i=0;i<=len;i++)
{
if(str[i]==' ')
{
temp=str.substr(starti,i-starti);
starti=i+1;
mark[M[temp]]=true;
}
}
a=0;
b=0;
c=0;
if(mark[1])
{
a++;
}
if(mark[2])
{
if(mark[3]&&!mark[5]&&!mark[6]&&mark[1])
b++;
else if(!mark[3]&&(mark[5]||mark[6]||!mark[1]))
c++;
}
if(mark[3])
{
if(mark[4])
b++;
else if(!mark[4]&&mark[1])
a++;
else if(!mark[1]&&!mark[4])
c++;
}
if(mark[4])
{
if(mark[1])
a++;
}
if(mark[6])
{
if(mark[1]&&!mark[4])
c++;
else
a++;
}
if(mark[7])
{
if(!mark[1]&&!mark[2])
a++;
else if(mark[1])
b++;
}
printf("Scenario #%d:\n",zz++);
if(a>b&&a>c)
{
printf("cinema\n");
}
else if(b>c&&b>a)
{
printf("disco\n");
}
else if(c>a&&c>b)
{
printf("cocktail bar\n");
}
else
printf("stay at the Hacienda\n");
printf("\n");
}
return 0;
}