P1184
题目背景
高手是可以复活的,这点我们大家都知道。
题目描述
高手列出了一个详尽的日程表,这次他要追求的则是一个心灵纯洁的小萝莉。他和她都是要上课的,但是也会有时间空闲,于是高手决定无时无刻都要跟着她。为了她,高手决定转学到一年级。现在高手已经花重金买下了她的日程表,每一天都会有她的行踪。现在列出了高手方便去的地方,以及不方便去的地方。其中方便去的地方可以去无限次,不方便去的地方不能去,一共有nn个方便去的地点,mm天。高手想知道他在这mm天中,最多能和她在一起多久。不方便去的地方是不会列出的。
输入输出格式
输入格式:
第一行n,m。
接下来n行,每行一个地名,高手方便去的地方。
接下来m行,每行一个地名,她这一天在的地方。
输出格式:
一个整数,他们在同一个地方的天数。
char类型
#include#include #include #include #include #include //多背一点头文件比较好,不要像我一样(;д;)(;д;)using namespace std;int n,m,i,j,sum=0;char cspace[21][1001],loli[1001];int main(){ cin>>n>>m; for(i=1;i<=n;++i) cin>>cspace[i];//can space的缩写 //i是第几个位置 for(i=1;i<=m;++i) { cin>>loli; for(j=1;j<=n;++j) if(strcmp(cspace[j],loli)==0){ /*strmap函数,主要用于比较两个字符串
设这两个字符串为str1,str2,
若str1=str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
*/ ++sum; break; } } cout<
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
WCCLASSJIFANGXIAOZHANGBANGONGSHIHER HOMEGAOSHOU HOMELAOSHIBANGONGSHIPOLICE OFFICESHIT HOUSELAOSHIBANGONGSHISHIT HOUSEGAOSHOU HOMESHIT HOUSEXXLAOSHIBANGONGSHILAOSHIBANGONGSHIHER HOMEXXXIAOZHANGBANGONGSHI。。。。。。。。
答案是45
这里有一个问题在于有一些毒瘤的点换行和回车用的不一样,因为在Windows下
\r回车,\n换行
windows使用的换行符为\r\n所以必须得输一个cin.ignore().ignore()
这个题吧,其实思路不是太难,但是样例有点毒瘤了,主要还是从题目里面学习方法,毕竟字符串这东西在高精和特殊的输入输出里面都还挺常见的,所以一定要掌握。