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

相关文章

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指令

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python中yield的用法和实际应用示例

《Python中yield的用法和实际应用示例》在Python中,yield关键字主要用于生成器函数(generatorfunctions)中,其目的是使函数能够像迭代器一样工作,即可以被遍历,但不会... 目录python中yield的用法详解一、引言二、yield的基本用法1、yield与生成器2、yi

C++ vector越界问题的完整解决方案

《C++vector越界问题的完整解决方案》在C++开发中,std::vector作为最常用的动态数组容器,其便捷性与性能优势使其成为处理可变长度数据的首选,然而,数组越界访问始终是威胁程序稳定性的... 目录引言一、vector越界的底层原理与危害1.1 越界访问的本质原因1.2 越界访问的实际危害二、基

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.