常见STL与迭代器 - Problem A 上网统计

在一个网络系统中有 N 个用户、M 次上网记录。每个用户可以自己注册一个用户名,每个用户名是一个只含小写字母且长度小于 1000 的字符串。每个上网的账号每次上网都会浏览网页,网页名是以一个只含小写字母且长度小于 1000 的字符串,每次上网日志里都会有记录,现在请统计每个用户每次浏览了多少个网页。

Input

第 1 行包含两个用 1 个空格隔开的正整数 N(1≤N≤1000)和 M(1≤M≤5000)。
第 2~M+1 行,每行包含 2 个用 1 个空格隔开的字符串,分别表示用户名和浏览的网页名。

Output

共 N 行,每行的第一个字符串是用户名,接下来的若干字符串是这个用户依次浏览的网页名(之间用一个空格隔开)。按照用户名出现的次序排序输出。

Sample Input

5 7
goodstudyer bookshopa
likespacea spaceweb
goodstudyer bookshopb
likespaceb spaceweb
likespacec spaceweb
likespacea juiceshop
gameplayer gameweb

Sample Output
goodstudyer bookshopa bookshopb
likespacea spaceweb juiceshop
likespaceb spaceweb
likespacec spaceweb
gameplayer gameweb

#include <bits/stdc++.h>
 
using namespace std;
 
struct node
{
    string id;
    vector<string> web;
};
 
int main()
{
    vector<node> v;
    int n, m, len;
    string id, web;
     
    cin >> n >> m;
    for( int i = 1; i <= m; i++ )
    {
        cin >> id >> web;
         
        bool flag = 0;
         
        len = v.size();
         
        for( int j = 0; j < len; j++ )
        {
            if( id == v[j].id )
            {
                v[j].web.push_back( web );
                flag = 1;   
                break;
            }
        }
        if( !flag )
        {
            node new_node;
            new_node.id = id;
            new_node.web.clear();
            new_node.web.push_back( web );
            v.push_back( new_node );
        }
    }
     
    len = v.size();
     
    for( int i = 0; i < len; i++ )
    {
        cout << v[i].id;
         
        int len1 = v[i].web.size();
         
        for( int j = 0; j < len1; j++ )
        {
            cout << " " << v[i].web[j];
        }
        cout << endl;
    }
     
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值