ACM-模拟-STL应用 PJ的情书 桶排去重加上pair,用vector进行cmp重载

2024-06-07 15:18

本文主要是介绍ACM-模拟-STL应用 PJ的情书 桶排去重加上pair,用vector进行cmp重载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

东秦oj1872:PJ的情书
PJ真的找到女朋友了!!!!羡慕~
这题感觉是哈夫曼编码的反版。。。。。
样例挺好的看懂的
输入

I AM PJ
I Love you so much!
CC

输出

o: 000000000000000
C: 000000000000001
I: 00000000000001
u: 0000000000001
A: 000000000001
J: 00000000001
L: 0000000001
M: 000000001
P: 00000001
c: 0000001
e: 000001
h: 00001
m: 0001
s: 001
v: 01
y: 1
00000000000001 000000000001000000001 0000000100000000001
00000000000001 000000000100000000000000001000001 10000000000000000000000000001 001000000000000000 00010000000000001000000100001!
000000000000001000000000000001

一开始字符计数会想到map<char,int>,后来发现char可以用char-‘A’hash处理。最后顺便复习了STL里的pair和vector,因为map里的second不好处理,sort的cmp必须线性结构,所以最后选择了vector来处理这题。

这题模拟让我知道,字符数组赋值一定在最后一个字符加’\0’,不然会乱码
模拟我就没什么好说的,我觉得这题写法挺多的,欢迎大家留言一起交流学习好的写法。笔芯!~~~~

#include<string.h>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
//字母,次数,对应起来。所以想到了用map<char, int>来存,但是map不好排second,但是map里没有-重载,
//map的替换======数组桶排去重,pair+vector+cmp所以直接将字符转换   c=c-'A' 
//所以将字符和编码存在pair<char,int>下,答案放在vector<pair<char,int> >下,按照first递减,second递增的方式输出。需要构造比较函数cmp,在sort里引用。 
//sort默认按照first、second为第一、二关键字排序输出。如果加个greater<type>()则逆序输出。
vector<pair<char,int> >ans; 
bool cmp(const pair<char, int> &lhs, const pair<char,int> &rhs)
{if(rhs.second == lhs.second) return lhs.first < rhs.first;return lhs.second > rhs.second;
}
int cho[60];
int main(){freopen("3.txt","r",stdin);//freopen("2.txt","w",stdout);string s[600];memset(cho,0,sizeof(cho));int i,j,k=0;while(getline(cin,s[k])){for(i=0;i<s[k].size();i++){if((s[k][i]>='A'&&s[k][i]<='Z')||(s[k][i]>='a'&&s[k][i]<='z'))cho[s[k][i]-'A']++;}k++;}//printf("%d\n",'z'-'A');for(i=0;i<=('z'-'A');i++){if(cho[i]>0){ans.push_back(make_pair(i,cho[i]));}}sort(ans.begin(),ans.end(),cmp);int l=ans.size();vector<pair<char,int> >::iterator it=ans.begin();//for(;it!=ans.end();it++)printf("%d %d\n",it->first,it->second);//printf("%d\n",l);char p[60][60];int len=l-1;//for(i=0;i<l-1-j;i++)p[(it->first)][i]='0';//j++;it++;for(it=ans.begin();it!=ans.end();it++){for(i=0;i<len-1;i++){p[(it->first)][i]=48;}if(it!=ans.begin()){p[(it->first)][len-1]=49;p[(it->first)][len]='\0';len--;}else {p[(it->first)][len-1]=48;p[(it->first)][len]='\0';//一定要加上!!!不然会乱出届 }}for(it=ans.begin();it!=ans.end();it++){int a=it->first;printf("%c: %s\n",(char)(a+'A'),p[a]);}for(i=0;i<k;i++){for(j=0;j<s[i].size();j++){if((s[i][j]>='A'&&s[i][j]<='Z')||(s[i][j]>='a'&&s[i][j]<='z'))printf("%s",p[s[i][j]-'A']);else printf("%c",s[i][j]);}printf("\n");}return 0;
}

有错欢迎大家指正!!~

这篇关于ACM-模拟-STL应用 PJ的情书 桶排去重加上pair,用vector进行cmp重载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039540

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构