题目链接:click here~~

题目大意】给你一个整数序列,求最多选出每个长度为3的且序列元素单调的子序列的个数,并且输出每个子序列的元素,作为一个子序列,每个元素只能选一次,也就是满足一次性,但每个子序列里可以存在相同的元素,

解题思路】刚开始以为比较简单,就顺着思路写了一遍,第一发W了之后发现此题还是有一定的思维性,之后一直纠结在最多能选出多少子序列,因为考虑到如果序列里相同的元素的个数对最后结果会产生不同的影响,于是就想到了set容器的自动去重。

思想

1,在判断set.size()大于等于3的情况下,将已经排序(逆序排序,即次数多的元素在前)的元素存到另一个容器里(可以用vector),注意push_back(元素的值)而不是次数

2,删除已经存进的元素,(利用set..erase()),同时判断剩下元素次数是否大于零,是的话重复步骤1,这样一来我们就不用考虑相同元素的影响,因为如果已经选过了,就会立即删除,之后就不会再选,而最后得到的子序列的总个数就是vector的大小。

其实还有其他方法可以解决,暂时没有想到,待更新。。。

代码:

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int num[N];
map <int,int>mapp;
typedef pair<int,int>pii;
set<pii>seet;
vector<int >vec;
int main(){int t,n,m;while(scanf("%d",&t)!=EOF){mapp.clear(),seet.clear(),vec.clear();for(int i=0; i<t; i++){scanf("%d",&num[i]);mapp[num[i]]++;//次数,值}map<int,int >::iterator it;for(it=mapp.begin(); it!=mapp.end(); it++){seet.insert(pii(it->second,it->first));}
//        set<pii>::iterator itt;
//        for(itt=seet.begin(); itt!=seet.end(); itt++)
//        {
//            cout<<(itt->first)<<" "<<(itt->second)<<endl;
//        }while(seet.size()>=3){pii ans[3];for(int i=0; i<3; i++){ans[i]=*--seet.end();seet.erase(--seet.end());vec.push_back(ans[i].second);}for(int i=0; i<3; i++){if(--ans[i].first) seet.insert(ans[i]);}sort(vec.rbegin(),vec.rbegin()+3);}printf("%d\n",vec.size()/3);for(int i=0; i<vec.size(); i+=3)printf("%d %d %d\n",vec[i],vec[i+1],vec[i+2]);}return 0;
}
/*
7
7 2 4 3 5 6 13
2 2 37
1 1 2 3 3 4 56
2 3 3 4 5 66
2 3 5 5 5 6
*/

CodeForces 140C - New Year Snowmen(数据结构)相关推荐

  1. CodeForces - 140C New Year Snowmen

    CodeForces - 140C New Year Snowmen 题意: 现在来做雪人,每个雪人由三个不同大小的雪球构成:一个大的,一个中等的,一个小的.现在有 n 个雪球半径分别为 r1, r2 ...

  2. CodeForces 140C New Year Snowmen (贪心+优先队列)

    题意:n个数,选三个严格下降的数为一组,求最多能选多少组,并列出每组哪些数. 题解:贪心+优先队列 最多能选多少组,那么必须贪心数量多的. 例如:1 1 2 3 4 5 如果按照数的大小排序,只能贪到 ...

  3. 贪心(优先队列) - New Year Snowmen - CodeForces - 140C

    贪心(优先队列) - New Year Snowmen - CodeForces - 140C 题意: 给定一个长度为n的正整数序列a1,a2,...,an.给定一个长度为n的正整数序列a_1,a_2 ...

  4. New Year Snowmen codeforces 140C

    题目 As meticulous Gerald sets the table and caring Alexander sends the postcards, Sergey makes snowme ...

  5. 怎么获取codeforces的数据_原创 | codeforces 1417C,逆向思考的数据结构题

    点击上方蓝字,关注并星标,和我一起学技术. 大家好,欢迎阅读周末算法题专题. 今天我们选择的是codeforces contest 1417的C题k-Amazing Numbers.这是一道经典的数据 ...

  6. codeforces 贪心+优先队列_算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)...

    堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值:

  7. CodeForces - 571D Campus(数据结构综合)

    题目链接:点击查看 题目大意: 题目分析:数据结构的题目写起来真好玩~(debug到吐) 考虑离线,题目实质上就是维护两个森林,然后对同一个序列进行的赋值操作,如果是对单一的森林进行加边删边然后连通块 ...

  8. Codeforces数据结构(水题)小结

    最近在使用codeblock,所以就先刷一些水题上上手 使用codeblock遇到的问题 1.无法进行编译-------从setting中的编译器设置中配置编译器 2.建立cpp后无法调试------ ...

  9. Codeforces上几个非常妙的数据结构题

    Codeforces 833B The Bakery Codeforces 633H Fibonacci-ish II Codeforces 522D Closest Equals Codeforce ...

最新文章

  1. react中的axios配置文件
  2. 二级计算机access押题,全国计算机等级考试标准教程:二级Access
  3. 欧拉定理(洛谷-P5091)(十进制快速幂实现)
  4. Android 应用开发(43)---开关按钮ToggleButton和开关Switch
  5. 三点弯曲弹性模量怎么计算公式_腰背肌锻炼:五点支撑和三点支撑(视频)
  6. 指定LINUX内存大小,linux下内存大小、起始地址的解析与修改
  7. win10固态硬盘分区 整数_固态硬盘怎么重装win10系统?Win10固态硬盘重装系统教程...
  8. 微信小程序+Springboot实现宠物医院管理系统
  9. 数据科学Python库01:Pandas
  10. 网页配色方案及方法[网上配色文章集合
  11. 天狼星网络验证源码/官方正版/内附搭建教程
  12. Unable to read entire header; 80 bytes read; expected 512 bytes
  13. 计算机启动到安全模式 黑屏,电脑开机到一半就黑屏,显示器显示无信号,安全模式可以进去...
  14. CAJ转Word有哪些既免费还不限制页数的转换工具?
  15. python面向对象编程指南([美stevenflott_Python面向对象编程指南 ([美]StevenFLott洛特) 中文_IT教程网...
  16. Remote 'g' packet reply is too long 错误
  17. 超级码力在线编程大赛初赛 第2场 1.三角魔法
  18. Python学习笔记 day9 堡垒机前戏之paramiko模块
  19. 漏洞解决方案-文件上传
  20. Unity3D开发之折线图的制作(二)

热门文章

  1. 编程语言通用JsonResult,返回格式化json字符串,使用简单
  2. 自习室管理系统的设计与实现
  3. 拉格朗日插值原理及其Julia实现
  4. macos bigsur PD版本 15.1.2 (47123)虚拟机不能运行不能联网USB解决办法
  5. vue addRoute 实现子账号权限管理
  6. 支持硬件加速的ffmpeg编译
  7. 设计模式—工厂设计模式
  8. java中list方法addall怎么写_Java ArrayList addAll() 方法
  9. Java第三课:电脑软件及快捷键应用
  10. Pixhawk---fatal: Not a git repository (or any of the parent directories)