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

相关文章

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

一文解密Python进行监控进程的黑科技

《一文解密Python进行监控进程的黑科技》在计算机系统管理和应用性能优化中,监控进程的CPU、内存和IO使用率是非常重要的任务,下面我们就来讲讲如何Python写一个简单使用的监控进程的工具吧... 目录准备工作监控CPU使用率监控内存使用率监控IO使用率小工具代码整合在计算机系统管理和应用性能优化中,监

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应