G. I love Codeforces
题目大意:给你n个字符串,以及m个喜欢关系,如果u喜欢v,这时候u会把它的用户名改为 I_love_ 加上v当时的用户名
Examples
input
5
anonymous
natalia
LeBron
Tanya_Romanova
MikeMirzayanov
6
1 2
3 4
2 1
4 3
1 4
3 2
output
Copy
I_love_I_love_I_love_Tanya_Romanova
思路:
SB模拟题,纯模拟会出MLE,RE,TLE等锅,只需要记录每个点喜欢(I_love_)的个数,以及每个点对应的最后一个点。
需要注意一下:如果要使用printf输出字符串,需按如下方式输出:
string S; printf("%s",S.c_str());
输入带有空格的字符串
#include<string>
string str; getline(cin,str);
接收一个字符串,可以接收空格并输出
#include <iostream> using namespace std; int main () { char m[20]; cin.getline(m,5); cout<<m<<endl;
}
注意事项:
1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数
2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过
str="
";
getline(cin,str);
的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。
参考博文:https://www.cnblogs.com/AndyJee/archive/2014/07/02/3821067.html
MrBlue_and_MrGreen
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,p[200005],sum[200005]; string s[200005],S="I_love_"; void add(int u,int v){ p[u]=p[v];sum[u]=sum[v]+1; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) cin>>s[i]; scanf("%d",&m); for(int i=1;i<=n;i++) p[i]=i; for(int i=1;i<=m;i++){ int a,b; scanf("%d%d",&a,&b); add(a,b); } for(int i=1;i<=sum[1];i++) printf("%s",S.c_str()); printf("%s",s[p[1]].c_str()); return 0; }