天梯赛--清点代码库
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;
}
天梯赛--清点代码库相关推荐
- 题223.2022寒假天梯赛训练-7-12 清点代码库 (25 分)
文章目录 题223.2022寒假天梯赛训练-7-12 清点代码库 (25 分) 一.题目 二.题解 题223.2022寒假天梯赛训练-7-12 清点代码库 (25 分) 一.题目 二.题解 我这个做法 ...
- 天梯赛:L2-039 清点代码库 (25 分)
题目详情 - L2-039 清点代码库 (25 分) (pintia.cn) 这就是一道纯stl题,用map存数组(不能是字符串,因为有负数).然后用vector转存map,进行按值排序.无脑用函数就 ...
- 2021天梯赛 L2-039 清点代码库 题解
L2-039 清点代码库 (25 分) 题目: 上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请设计一个程序,能够将代码库中所有功能重 ...
- L2-039 清点代码库 - java
L2-039 清点代码库 Java (javac) 时间限制 1500 ms 内存限制 128 MB Python (python3) 时间限制 1500 ms 内存限制 64 MB 其他编译器 时间 ...
- 简单题 6 清点代码库 (25 分)
链接::题目详情 - L2-039 清点代码库 (25 分) (pintia.cn) 上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请 ...
- 7-23 清点代码库(简洁AC+多方法)
7-23 清点代码库 分数 25 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请 ...
- L2-3 清点代码库【STL】
L2-3 清点代码库[STL] #include<bits/stdc++.h> using namespace std;#define int long longint n,m; stru ...
- 2021年CCCC天梯赛 L2清点代码库 (哈希表,数据结构)
分析 2021年CCCC天梯赛的一道问题. 使用一个数据结构存贮所有的数组及其出现的次数. 使用哈希表mp存储数组vector<intvector< int\>vector<i ...
- L2-039 清点代码库 (25 分)-PAT 团体程序设计天梯赛 GPLT
上图转自新浪微博:"阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍.请设计一个程序,能够将代码库中所有功能重复的代码找出.各位大佬有啥想法,我当时就懵了,然 ...
最新文章
- linux设备驱动之总线、设备、驱动
- android 模拟器
- Android实现边缘凹凸的View
- Asp.net C# 遍历Excel中的表格名称
- Linux下的用户切换命令
- Session 实现、配置与使用详解
- python中绝对角度是什么意思_Python中的角度转换功能
- R 保存包含中文的 eps 图片--showtext
- leetcode题解持续更新
- Java根据身份证号或者出生日期计算年龄
- Delta3d 2.8 版本终于发版
- C语言刷题之动态规划进阶(二)
- C++ 复杂的数组声明: int (*Parray)[10] = arr,int (arrRef)[10] = arr,int *(arry)[10] = ptrs;
- Android wifi 破解
- android 大量代码中 grep 太慢,ReactNative 性能 - 闪电教程JSRUN
- 信息系统项目管理师学习笔记7-项目成本管理
- 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren...
- 软技巧相关【5002】Team管理之绩效考核
- UVM中SVA使用指南
- 关闭windows安全中心报警