这道题史上最水,不知道为什么只有两个人A了,好了,废话少说,直接分析。
这道题很明显要用字符串
这道题其实很简单,就是判断+计数,比较大小,输出。思路就是这么简单!(是不是输入有些毒瘤。。。)
直接上代码!
#include<bits/stdc++.h>
using namespace std;
map<string,int>h;
int score[100];
string name[100];
int n,m;
int id(string a)
{
int t=0;
for(int i=0;i<a.size();i++)
{
t+=int(a[i]) ;
}
return t;
}
bool cmp(const string &a,const string &b)//此处个人建议放上指针,不然会卡评测,这道题就随便拉。
{
return id(a)<id(b) ;
}
string sub(string a,int l,int r)//取子串,找人名
{
string ans="";
for(int i=l;i<=r;i++)
{
ans+=a[i];
}
return ans;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>name[i];
}
sort(name+1,name+n+1,cmp);//排序。
for(int i=1;i<=n;i++)
{
h[name[i]]=i;//将其序号放入容器中。
score[i]=0;//第i个人输入时嫌疑度为零。
}
cin>>m;
getchar();
for(int i=1;i<=m;i++)
{
string s;
getline(cin,s);
int w=s.find(' ');//判定空格
string w1=sub(s,0,w-1) ;
int _w=s.find(' ',w+1);
string w2=sub(s,w+1,_w-1) ;
if(w2=="I")
{
score[h[w1]]++;//判断是“I ”是谁后其嫌疑度++;
}
else
{
score[h[w2]]++;//如果不是I,则输入的名字嫌疑度++;
}
}
string ans="";
int maxl=INT_MIN;
for(int i=1;i<=n;i++)
{
if(score[i]>maxl)
{
maxl=score[i];
ans=name[i];
}//判定谁的嫌疑度最大。
}
cout<<ans<<endl;//最后输出。
return 0;
}
不用多讲了,就这样,暴力出奇迹!