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操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Java 单元测试之Mockito 模拟静态方法与私有方法最佳实践

《Java单元测试之Mockito模拟静态方法与私有方法最佳实践》本文将深入探讨如何使用Mockito来模拟静态方法和私有方法,结合大量实战代码示例,带你突破传统单元测试的边界,写出更彻底、更独立... 目录Mockito 简介:为什么选择它?环境准备模拟静态方法:打破“不可变”的枷锁传统困境解法一:使用M

Git进行版本控制的实战指南

《Git进行版本控制的实战指南》Git是一种分布式版本控制系统,广泛应用于软件开发中,它可以记录和管理项目的历史修改,并支持多人协作开发,通过Git,开发者可以轻松地跟踪代码变更、合并分支、回退版本等... 目录一、Git核心概念解析二、环境搭建与配置1. 安装Git(Windows示例)2. 基础配置(必

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令