L2-3 清点代码库 (25 分)

上图转自新浪微博:“阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍。请设计一个程序,能够将代码库中所有功能重复的代码找出。各位大佬有啥想法,我当时就懵了,然后就挂了。。。”

这里我们把问题简化一下:首先假设两个功能模块如果接受同样的输入,总是给出同样的输出,则它们就是功能重复的;其次我们把每个模块的输出都简化为一个整数(在 int 范围内)。于是我们可以设计一系列输入,检查所有功能模块的对应输出,从而查出功能重复的代码。你的任务就是设计并实现这个简化问题的解决方案。

输入格式:

输入在第一行中给出 2 个正整数,依次为 N(≤104)和 M(≤102),对应功能模块的个数和系列测试输入的个数。

随后 N 行,每行给出一个功能模块的 M 个对应输出,数字间以空格分隔。

输出格式:

首先在第一行输出不同功能的个数 K。随后 K 行,每行给出具有这个功能的模块的个数,以及这个功能的对应输出。数字间以 1 个空格分隔,行首尾不得有多余空格。输出首先按模块个数非递增顺序,如果有并列,则按输出序列的递增序给出。

注:所谓数列 { A1​, ..., AM​ } 比 { B1​, ..., BM​ } 大,是指存在 1≤i<M,使得 A1​=B1​,...,Ai​=Bi​ 成立,且 Ai+1​>Bi+1​。

输入样例:

7 3
35 28 74
-1 -1 22
28 74 35
-1 -1 22
11 66 0
35 28 74
35 28 74

输出样例:

4
3 35 28 74
2 -1 -1 22
1 11 66 0
1 28 74 35

这个题一开始想用vector<vector<int>>v,然后发现这样的话排序就不太好操作了,于是就可以把vector<int>放到结构体里,最后形成了以下代码(但是有一个测试点会超时):

#include<iostream>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<map>
using namespace std;
map<vector<int>,int>mp;//mp存储的是重复出现vector的个数
typedef struct ss
{vector<int>num;}DATE;
DATE stu[10010];bool cmp(DATE l,DATE r)
{if(mp[l.num ]!=mp[r.num ])return mp[l.num ]>mp[r.num ];for(int i=0;i<l.num.size();i++){if(l.num[i]!=r.num[i])return l.num[i]<r.num [i];}
}int main()
{int n,m;scanf("%d%d",&n,&m);int top=0;while(n--){vector<int>t;for(int i=0;i<m;i++){int x;scanf("%d",&x);t.push_back(x);}if(!mp[t] ){stu[++top].num =t;}mp[t]++;}sort(stu+1,stu+1+top,cmp);printf("%d\n",top);for(int i=1;i<=top;i++){printf("%d",mp[stu[i].num]);for(int j=0;j<stu[i].num.size();j++){printf(" %d",stu[i].num [j]);}printf("\n");}return 0;
}

然后稍微转换了一下思路,让mp[t]=结构体的下标,stu[mp[t]],个数也放在结构体里面,然后再操作就会AC了

#include<iostream>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<map>
using namespace std;
map<vector<int>,int>mp;
//mp[t]表示t所对应的之前保存过的结构体下标
typedef struct ss
{vector<int>num;int cnt=0;
}DATE;
DATE stu[10010];bool cmp(DATE l,DATE r)
{if(l.cnt !=r.cnt )return l.cnt >r.cnt ;for(int i=0;i<l.num .size();i++){if(l.num [i]!=r.num [i])return l.num[i] <r.num [i];}
}int main()
{int n,m;scanf("%d%d",&n,&m);int top=0;while(n--){vector<int>t;for(int i=0;i<m;i++){int x;scanf("%d",&x);t.push_back(x);}if(!mp[t] )//如果之前没有记录过,就在结构体里面给他申请一个位置 {mp[t]=++top;//用map记录下来这个位置 stu[mp[t]].num =t;stu[mp[t]].cnt ++;}else//之前记录过了的话,就直接++ {stu[mp[t]].cnt++;}}sort(stu+1,stu+1+top,cmp);printf("%d\n",top);for(int i=1;i<=top;i++){printf("%d",stu[i].cnt );for(int j=0;j<stu[i].num.size();j++){printf(" %d",stu[i].num [j]);}printf("\n");}return 0;
}

天梯赛--清点代码库相关推荐

  1. 题223.2022寒假天梯赛训练-7-12 清点代码库 (25 分)

    文章目录 题223.2022寒假天梯赛训练-7-12 清点代码库 (25 分) 一.题目 二.题解 题223.2022寒假天梯赛训练-7-12 清点代码库 (25 分) 一.题目 二.题解 我这个做法 ...

  2. 天梯赛:L2-039 清点代码库 (25 分)

    题目详情 - L2-039 清点代码库 (25 分) (pintia.cn) 这就是一道纯stl题,用map存数组(不能是字符串,因为有负数).然后用vector转存map,进行按值排序.无脑用函数就 ...

  3. 2021天梯赛 L2-039 清点代码库 题解

    L2-039 清点代码库 (25 分) 题目: 上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请设计一个程序,能够将代码库中所有功能重 ...

  4. L2-039 清点代码库 - java

    L2-039 清点代码库 Java (javac) 时间限制 1500 ms 内存限制 128 MB Python (python3) 时间限制 1500 ms 内存限制 64 MB 其他编译器 时间 ...

  5. 简单题 6 清点代码库 (25 分)

    链接::题目详情 - L2-039 清点代码库 (25 分) (pintia.cn) 上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请 ...

  6. 7-23 清点代码库(简洁AC+多方法)

    7-23 清点代码库 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请 ...

  7. L2-3 清点代码库【STL】

    L2-3 清点代码库[STL] #include<bits/stdc++.h> using namespace std;#define int long longint n,m; stru ...

  8. 2021年CCCC天梯赛 L2清点代码库 (哈希表,数据结构)

    分析 2021年CCCC天梯赛的一道问题. 使用一个数据结构存贮所有的数组及其出现的次数. 使用哈希表mp存储数组vector<intvector< int\>vector<i ...

  9. L2-039 清点代码库 (25 分)-PAT 团体程序设计天梯赛 GPLT

    上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请设计一个程序,能够将代码库中所有功能重复的代码找出.各位大佬有啥想法,我当时就懵了,然 ...

最新文章

  1. linux设备驱动之总线、设备、驱动
  2. android 模拟器
  3. Android实现边缘凹凸的View
  4. Asp.net C# 遍历Excel中的表格名称
  5. Linux下的用户切换命令
  6. Session 实现、配置与使用详解
  7. python中绝对角度是什么意思_Python中的角度转换功能
  8. R 保存包含中文的 eps 图片--showtext
  9. leetcode题解持续更新
  10. Java根据身份证号或者出生日期计算年龄
  11. Delta3d 2.8 版本终于发版
  12. C语言刷题之动态规划进阶(二)
  13. C++ 复杂的数组声明: int (*Parray)[10] = arr,int (arrRef)[10] = arr,int *(arry)[10] = ptrs;
  14. Android wifi 破解
  15. android 大量代码中 grep 太慢,ReactNative 性能 - 闪电教程JSRUN
  16. 信息系统项目管理师学习笔记7-项目成本管理
  17. 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren...
  18. 软技巧相关【5002】Team管理之绩效考核
  19. UVM中SVA使用指南
  20. 关闭windows安全中心报警

热门文章

  1. rancher2.6部署k8s集群示例
  2. 马云:如何组建自己的技术团队
  3. 如何利用免费工具轻松实现个人号裂变?
  4. 全国计算机考试第五套,计算机等级一级MS Office考试考题:第五套字处理题
  5. 八股文之linux常用指令
  6. CentOS8 yum/dnf 配置国内源
  7. Android 接入阿里实人认证
  8. android 将文字转换为拼音格式,android中将汉字转为拼音
  9. 全国计算机注册时密码为什么老是错误,电脑密码正确却显示密码错误怎么办
  10. 英语思维导图大全 阅读理解(二十一)