Bus

一个人想着一个人 提交于 2020-11-16 05:01:27

Bus

Accepted : 54 Submit : 491
Time Limit : 1000 MS Memory Limit : 65536 KB

题目描述

小强刚来到长沙这个大城市,发现这里有很多他老家没有的东西,其中一个就是公交车了。小强的家到学校有很多个公交站,每个公交站都有一个英文名字。小强很喜欢坐公交车,但是他有个奇怪的要求,就是公交车的上车站和下车站的英文名字必须是首字母相同的,且不在同一个站上下车,不然小强宁愿走过这个站去搭下一趟车,甚至直接走到学校。给出小强从家里到学校的之间每一个公交站的英文名字,问如果不往回走,小强最多能搭几次公交车?

输入

多组样例,每组样例第一行为非负整数n(n<=1000),表示小强家里到学校之间有n个公交站。接下来n行,每行有一个英文名字,每行不超过100字符。

输出

对于每组样例,输出最多的乘坐次数。

样例输入

4
shaoshan
erzhong
shangxia
dongmen
5
shaoshan
shangxia
ertian
erzhong
dongmen

样例输出

1
2

Source

XTUCPC2013 

#include<iostream>
#include<deque>
#include<string>
#include<algorithm>
using namespace std;
deque<string> s;
int sum;
deque<string>::iterator pos,bos;
class nth
{
private:
string b;
public:
nth(string bb):b(bb)
{}
bool operator() (string a)
{
return (a[0]==b[0]);
}
};
void ju(bool &jud)
{
if(jud)
pos=s.begin();
else
pos=(bos+1);
deque<string>::iterator it,jieg;
it=pos;
if(distance(pos,s.end()-1)>0)
{
jieg=find_if(it,s.end()-1,nth(*(s.end()-1)));
if(jieg!=s.end()-1) 
{
jud=false;++sum;
bos=(s.end()-1);
}
}
}
int main()
{
int n;
bool jud;
string sur;
// freopen("in.txt","r",stdin);
while(cin>>n)
{
jud=true;
sum=0;
while(n--)
{
cin>>sur;
s.push_back(sur);
ju(jud);
}
s.clear();
cout<<sum<<endl;
}
return 0;
}



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!