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

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

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

随后 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
题解:很简单,就是用map<vector,int> 来去重即可。但开始的时候没有想到用vector,用了字符串,但是wa了两个点,下面是代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
map<string,int> ma;//前一个int是编号
int n,m;
struct node
{string s;int num;bool operator <(node &w){if(num!=w.num) return num>w.num;else return s<w.s;}
};
vector<node> vec;
int main()
{cin>>n>>m;getchar();for(int i=1;i<=n;i++){string s;getline(cin,s);ma[s]++;}//pair遍历时用.的而不是用->for(auto it=ma.begin();it!=ma.end();it++){vec.push_back({it->first,it->second});}sort(vec.begin(),vec.end());printf("%d\n",vec.size());vector<string> ans;for(int i=0;i<vec.size();i++){string copy="";ans.clear();string ss=vec[i].s;for(int j=0;j<ss.size();j++){if(ss[j]==' '){ans.push_back(copy);copy="";}else copy+=ss[j];}if(copy!="") ans.push_back(copy);cout<<vec[i].num;for(int i=0;i<ans.size();i++){cout<<" "<<ans[i];}cout<<endl;}return 0;
}

这个错在了“如果num相同的话应该按照递增输出”,但是我们可以比一下,假设是以下两个数组:
123 45 56
67 68 69
我们可以明显判断出第一个是要大的,但是在判断的时候,string的sort是第二个数组要大的,所以出错了。
下面是全对的代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int n,m;
struct node
{vector<int> v;int num;bool operator <(node &w){if(num!=w.num) return num>w.num;else for(int i=0;i<w.v.size();i++)if(v[i]!=w.v[i]) return v[i]<w.v[i];}
};
map<vector<int>,int> ma;
vector<node> ans;
int main()
{cin>>n>>m;getchar();for(int i=1;i<=n;i++){vector<int> vec;for(int j=1;j<=m;j++){int x;cin>>x;vec.push_back(x);}ma[vec]++;}//pair遍历时用.的而不是用->for(auto it=ma.begin();it!=ma.end();it++){ans.push_back({it->first,it->second});}sort(ans.begin(),ans.end());printf("%d\n",ans.size());for(int i=0;i<ans.size();i++){cout<<ans[i].num;for(int j=0;j<ans[i].v.size();j++){cout<<" "<<ans[i].v[j];}cout<<endl;}return 0;
}

L2-3 清点代码库 (25 分)相关推荐

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

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

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

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

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

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

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

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

  5. 7-12 清点代码库 (25 分)

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

  6. L2-039 清点代码库 (25 分)

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

  7. PTA 清点代码库 (25 分)

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

  8. L2-039 清点代码库 (25 分)(哈希)

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

  9. 清点代码库 (25 分)

    题目链接 这个题看起来思路一下子就来了,但是就是过不了全部样例,起初自己用string来存后面的数字,用map映射,但是总是有样例过不了,后来看到了大佬的博客真的绝绝子,属实自己对STL了解太少了.. ...

最新文章

  1. python【Matlibplot绘图库】基本使用(真の能看懂~!)
  2. linux查看python版本命令-linux 查看版本命令
  3. LIS(最大上升子序列)
  4. 概率分布:PMF与PDF
  5. 字符串左旋问题及判断一个字符串是否由另一个字符串左旋得到
  6. CVPR2020 | 遮挡也能识别?地平线提出用时序信息提升行人检测准确度
  7. python机器学习库sklearn——特征提取
  8. 人工智能技术发展必须遵循的基本伦理原则
  9. 笔记:vue项目中引用百度地图,地图空白现象
  10. c语言中有无注释重要吗,求助!有什么问题没考虑到吗? (c语言,大部分注释都写啦)...
  11. 2003 服务器自动重启设置,Win2003定时自动重启的完美方案
  12. 微信小程序,点击右上角返回箭头,返回指定页面
  13. 网易云解锁配置(windows)
  14. Java获取本月有多少天
  15. 成都车展:百度车联网的“阅兵”表演
  16. 【字符集五】c++标准库<locale>
  17. 【MySQL】表操作和库操作
  18. R语言验证均匀分布总体参数的的矩估计是相合的consistent
  19. 【Calculate】Calculate Linux安装操作记录
  20. AcWing 748. 数组的右下半部分

热门文章

  1. css如何将div画成三角形
  2. BLAST原理和用法总结(一)
  3. 新浪微博模拟登录分析(含验证码)
  4. Echarts实现省级地图的两种方法(以浙江省为例)
  5. 在Vue里使用G2地图制作省级地图展示各市级数据
  6. 京东网页(动态)搭建,利用jquery实现
  7. 自定义控件详解(二):Path类 相关用法
  8. 【python 笔记/小白快速入门python】python浅谈(一)犹抱琵琶半遮面
  9. bzoj 1022: [SHOI2008]小约翰的游戏John(反nim游戏)
  10. 射频百科 | 限幅器的使用指南