G. I love Codeforces

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="\n";
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;
}

 

posted @ 2018-08-29 17:09  清风我已逝  阅读(238)  评论(1编辑  收藏  举报