c++天梯赛L2-039 清点代码库 (25 分)天梯赛c++附详细注释
Posted ~晚风微凉~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++天梯赛L2-039 清点代码库 (25 分)天梯赛c++附详细注释相关的知识,希望对你有一定的参考价值。
没有题目没有附上题目,但是有输出入输出格式要求
输入格式:
输入在第一行中给出 2 个正整数,依次为 N(≤10
4)和 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
本题用到的STL容器
1map 2mutimap允许有相同的键 3vector变长数组
#include<bits/stdc++.h>
using namespace std;
//map其实有点像一个数组,不过就是数组的下标可以多样化
int main(){
ios::sync_with_stdio(false);
cout.tie(0);//让cin,cout和scanfprintf一样快的操作
int m,n,t;
cin>>m>>n;
map<vector<int>, int> mp;//因为键不可以改变,所以用这种,让其对应的值来统计个数
multimap<int, vector<int>> mp2;//因为输出是按个数的排列,所以键值反过来存放
for(int i=0;i<m;i++)//用multi是因为,map反过来时把我的键值为一的吃掉了一个
{ vector<int> vi;
vi.clear();
for(int d=0;d<n;d++)
{ cin>>t;
vi.push_back(t);}
if(mp.find(vi)==mp.end())
mp[vi]=1;
else mp[vi]++; }
cout<<mp.size()<<endl;//神奇的事情,刚刚用printf居然4输出跑到后面去了,明明在代码前面
for(auto i:mp)//难道是因为取消了同步机制吗?
mp2.insert(make_pair(-i.second,i.first));//不加“-”的话,就是按键值的递增序列排列的
for(auto i:mp2)//键的排列若是键的相反数就对了,所以下面还要加个“-”
{ cout<<-i.first;
for(auto l:i.second)
cout<<" "<<l;
cout<<endl;}
return 0;
}
//map以键,从小到大的顺序排列
以上是关于c++天梯赛L2-039 清点代码库 (25 分)天梯赛c++附详细注释的主要内容,如果未能解决你的问题,请参考以下文章