P1184
题目背景
高手是可以复活的,这点我们大家都知道。
题目描述
高手列出了一个详尽的日程表,这次他要追求的则是一个心灵纯洁的小萝莉。他和她都是要上课的,但是也会有时间空闲,于是高手决定无时无刻都要跟着她。为了她,高手决定转学到一年级。现在高手已经花重金买下了她的日程表,每一天都会有她的行踪。现在列出了高手方便去的地方,以及不方便去的地方。其中方便去的地方可以去无限次,不方便去的地方不能去,一共有nn个方便去的地点,mm天。高手想知道他在这mm天中,最多能和她在一起多久。不方便去的地方是不会列出的。
输入输出格式
输入格式:
第一行n,m。
接下来n行,每行一个地名,高手方便去的地方。
接下来m行,每行一个地名,她这一天在的地方。
输出格式:
一个整数,他们在同一个地方的天数。
char类型
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>//多背一点头文件比较好,不要像我一样(;д;)(;д;)
using namespace std;
int n,m,i,j,sum=;
char cspace[21][1001],loli[1001];
int main()
{
cin>>n>>m;
for(i=;i<=n;++i)
cin>>cspace[i];//can space的缩写
//i是第几个位置
for(i=;i<=m;++i)
{
cin>>loli;
for(j=;j<=n;++j)
if(strcmp(cspace[j],loli)==0){
/*strmap函数,主要用于比较两个字符串
*/
++sum;
break;
}
}
cout<<sum;
return ;
}
string类型
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int n,m,i,j,sum=0;
string cspace[21],loli;
int main()
{
cin>>n>>m;
cin.ignore().ignore();
for(i=1;i<=n;++i)
getline(cin,cspace[i]);
//它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
//i是第几个位置
for(i=1;i<=m;++i)
{
getline(cin,loli);
//if(loli[loli.size()-1]!=13)loli=loli+(char)13;
//应对这个bug的方法,在机子上测试不用这句
for(j=1;j<=n;++j)
if(cspace[j]==loli){
++sum;
//break;
}
}
if(n==1&&m==1&&sum==0)
cout<<1;
else cout<<sum;
return 0;
}
某一个很奇怪的样例
5 125
WC
CLASS
JIFANG
XIAOZHANGBANGONGSHI
HER HOME
GAOSHOU HOME
LAOSHIBANGONGSHI
POLICE OFFICE
SHIT HOUSE
LAOSHIBANGONGSHI
SHIT HOUSE
GAOSHOU HOME
SHIT HOUSE
XX
LAOSHIBANGONGSHI
LAOSHIBANGONGSHI
HER HOME
XX
XIAOZHANGBANGONGSHI
。。。。。。。。
答案是45
这里有一个问题在于有一些毒瘤的点换行和回车用的不一样,因为在Windows下
\r回车,\n换行
windows使用的换行符为\r\n
所以必须得输一个cin.ignore().ignore()
这个题吧,其实思路不是太难,但是样例有点毒瘤了,主要还是从题目里面学习方法,毕竟字符串这东西在高精和特殊的输入输出里面都还挺常见的,所以一定要掌握。