天梯赛2021 L2-039 清点代码库 (25 分)

主要问题
  1. 是否存在这个数组
  2. 排序
解决办法
  1. map<vector , int> 查看是否存在
  2. 自定义排序sort第三参数

易错:cin、cout多次使用时间长,选择scanf,printf

代码

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>

using namespace std;

const int N = 1e4 + 10;

int n , m;

struct Node{
    vector<int> arr;
    int cnt = 0;
}node[N];

bool cmp (const Node & a , const Node & b)
{
    if(a.cnt == b.cnt)
    {
        for(int i = 0 ; i < m ; i ++)
        {
            if(a.arr[i] == b.arr[i])continue;
            return a.arr[i] < b.arr[i];
        }
    }
    return a.cnt > b.cnt;
}

int main()
{
    int x;
    scanf("%d%d" , &n , &m);
    map < vector <int> , int > map1;
    for(int i = 0 ; i < n ; i ++)
    {
        vector <int> tmp;
        for(int j = 0 ; j < m ; j ++)
        {
            scanf("%d" , &x);
            tmp.push_back(x);
        }
        map1[tmp]++;
    }

    int i = 0;
    for(auto a : map1)
        node[i].arr = a.first , node[i ++].cnt = a.second;
    
    sort(node , node + i , cmp);

    printf("%d\n" , i);

    for(int j = 0 ; j < i ; j ++)
    {
        printf("%d " , node[j].cnt);
        for(int p = 0 ; p < m - 1 ; p ++)
            printf("%d " , node[j].arr[p]);
        printf("%d\n" , node[j].arr[m - 1]);
    }
    return 0;
}
题目描述 给定一个代码库,每个代码文件都有一个唯一的文件名和一个文件路径。文件路径是一个字符串,由斜杠隔的目录名称组成。例如,/usr/local/include/stdio.h 表示文件 stdio.h 位于目录 /usr 下的子目录 local 中的 include 目录中。 现在,给定一组查询,每个查询包含一个文件路径和一个整数 K,请你统计这个路径下所有文件中,代码行数不少于 K 的文件数量。 输入格式 第一行包含两个整数 N 和 M,别表示代码文件数量和查询数量。 接下来 N 行,每行描述一个代码文件,格式如下: 文件名 文件路径 代码行数 其中文件名和文件路径均不含空格,且文件路径以斜杠 / 开头,且不以斜杠结尾,代码行数是一个不超过 100 的正整数。 接下来 M 行,每行描述一个查询,格式如下: 文件路径 K 同样,文件路径以斜杠 / 开头,且不以斜杠结尾,K 是一个不超过 100 的正整数。 输出格式 对于每个查询,输出一个整数表示答案,每个答案占一行。 数据范围 1≤N≤10000, 1≤M≤100 输入样例1: 3 2 a.cpp /home/user/a 10 b.cpp /home/user/b 20 c.cpp /home/user/a 30 /home/user/a 15 /home/user/b 15 输出样例1: 1 1 输入样例2: 3 2 a.cpp /home/user/a 10 b.cpp /home/user/b 20 c.cpp /home/user/a 30 /home/user/a 25 /home/user/b 15 输出样例2: 1 算法1 (哈希表) $O(n)$ 时间复杂度 参考文献 python3 代码 C++ 代码 算法2 (暴力枚举) $O(n^2)$ blablabla 时间复杂度 参考文献 C++ 代码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值