next_permutation 函数的使用 poj1256

2023-11-12

next_permutation全排列函数是一个十分好用而且强大的函数。要想更好的了解这个函数可以看https://blog.csdn.net/howardemily/article/details/68064377

个人感觉写的特别好,里面有要注意的点。这里上几个例题吧:

number1:牛客网练习赛23D托米的咒语;

链接:https://www.nowcoder.com/acm/contest/156/D
来源:牛客网
 

托米没有完成上一个任务,准备施展黑魔法推倒 1317

 

黑魔法咒语被描述为一个 长为 n 的,仅包含小写英文字母 'a'...'i' 的字符串,在托米所在的星球,魔法造成的每次有效伤害都是来自他的一个子序列,对于每一个 'a'... 'i' 的排列(共 9! 种),若作为咒语的子序列出现, 就会造成 1 的伤害

 

而咒语的总伤害为所有 'a'... 'i' 的排列造成的伤害值之和,托米能打出多少点的伤害,是否能击败 1317 呢?

输入描述:

一行输入一个字符串 s

输出描述:

一行输出一个数,表示伤害值

示例1

输入

复制

aabcdefghi

输出

复制

1

备注:

|s| ≤  3000

这就是一个全排列找子串的问题:先定义一个主字符串"abcdefghi”然后进行全排列对比找答案、

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
 
using namespace std;
typedef long long ll;
const ll maxn=1e7+10;
const int Maxn=3000+10;
int main()
{
    char a[10]="abcdefghi";
    char s[Maxn];
    gets(s);
    int ans = 0;
    int t;
    int i;
    do{
        t=0,i=0;
        for(;a[i]!=0&&s[t]!=0;){
            if(a[i]==s[t])i++,t++;
            else t++;
        }
        if(i==9){
            ans++;
            /*  for(int i=0;i<9;i++){
                    printf("%c ",a[i]);
                }
                printf("\n");*/
            }
         
    }while(next_permutation(a,a+9));
    printf("%d\n",ans);
    return 0;
}

number2:poj1256

You are to write a program that has to generate all possible words from a given set of letters. 
Example: Given the word "abc", your program should - by exploring all different combination of the three letters - output the words "abc", "acb", "bac", "bca", "cab" and "cba". 
In the word taken from the input file, some letters may appear more than once. For a given word, your program should not produce the same word more than once, and the words should be output in alphabetically ascending order. 

Input

The input consists of several words. The first line contains a number giving the number of words to follow. Each following line contains one word. A word consists of uppercase or lowercase letters from A to Z. Uppercase and lowercase letters are to be considered different. The length of each word is less than 13.

Output

For each word in the input, the output should contain all different words that can be generated with the letters of the given word. The words generated from the same input word should be output in alphabetically ascending order. An upper case letter goes before the corresponding lower case letter.

Sample Input

3
aAb
abc
acba

Sample Output

Aab
Aba
aAb
abA
bAa
baA
abc
acb
bac
bca
cab
cba
aabc
aacb
abac
abca
acab
acba
baac
baca
bcaa
caab
caba
cbaa

Hint

An upper case letter goes before the corresponding lower case letter. 
So the right order of letters is 'A'<'a'<'B'<'b'<...<'Z'<'z'.

这里的考点是要自定义CMP,这也体现了next_permutation的强大;

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const ll maxn=1e7+10;
const int Maxn=20000+10;
bool com(char a,char b){
	if(tolower(a)!=tolower(b))return tolower(a)<tolower(b);
	else return a<b;
}
int main()
{
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int n;
	char ch[14];
	cin>>n;
	while(n--){
		cin>>ch;
		sort(ch,ch+strlen(ch),com);
		do{
			cout<<ch<<endl;
		}while(next_permutation(ch,ch+strlen(ch),com));
	}
 	return 0;
}

有很多函数可以减轻题目的复杂度。好好积累。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

next_permutation 函数的使用 poj1256 的相关文章

  • [STM32F1]STM32上的DWT与延时实现

    对于做单片机程序开发来说 定时管理的需求非常普遍 不管是 系统滴答定时器systick计数器延时或者是通过外设定时器timer的向上向下等计数来延时 甚至在精度要求不高的地方还可以通过变量自加判断来延时 这都是一种延时管理实现的方法 但是对
  • java并发的概念

    1 并发的概念 并发 concurrency 指在同一时刻只能有一条指令执行 但多个进程指令被快速的轮换执行 使得在宏观上具有多个进程同时执行的效果 但在微观上并不是同时执行的 只是把时间分成若干段 使多个进程快速交替的执行 2 并行的概念
  • Ubuntu配置中文环境

    用了一段时间的英文开发了想起来要不换中文试试 所以闲暇之余配置了一个中文 做了一个小记录 这个是英文的环境下面的界面 在安装前简称系统的网络 和源是否正常 检查网络ping www baidu com 检查源 cat etc apt sou
  • 老板的思维模式:投资与浪费

    有人说 人生最大的投资 不是房子 不是股票 是人 是跟什么人交往 跟随什么人 交什么样的朋友 其实就是你投资什么人 而这是对人生影响最大的 钱不会给你机会 股票不会 房子也不会 只有人会给你机会 当你需要帮助的时候 只有跟你要好的人会帮你
  • 企业运维实践-如何在K8S集群环境Gitlab+Jenkins+Jmeter+Grafana技术中实现自动化分布压力测试数据展示...

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 本章目录 0x00 前言简述 0x01 安装配置 在 Windows 中安装 Apache jmeter 工具 以二进制方式安装Helm
  • STM32 定时器

    include timer h include led h 本程序只供学习使用 未经作者许可 不得用于其它任何用途 Mini STM32开发板 通用定时器 驱动代码 正点原子 ALIENTEK 技术论坛 www openedv com 修改
  • 关于char类型变量输入与输出的区别

    笔者前几天看到了一个小项目 请输入一个小写字母 输出对应的大写字母 乍一看挺简单 可实际操作却难倒了我 直到我打开看了老师的视频之后 我才恍然大悟 char的输入其实输入的永远是数字 没有单纯的字符 与此同时char的输出却有两种形式 c对
  • covariance matrix r语言_时间序列分析

    这是关于时间序列的第N篇文章 本文将介绍ARIMAX模型 简单来说就是在ARIMA的基础上增加一个外生变量 ARIMAX和ARIMA相比在理论上没有太多新的内容 所以本文直接介绍在R里怎么一步一步跑ARIMAX 在阅读这篇文章前 需要对AR
  • MySQL 的主从复制原理详解高级

    首先要明白为什么要用 mysql 的主从复制 1 在从服务器可以执行查询工作 即我们常说的读功能 降低主服务器压力 主库写 从库读 降压 2 在从主服务器进行备份 避免备份期间影响主服务器服务 确保数据安全 3 当主服务器出现问题时 可以切
  • eclipse中package,source folder和folder

    在eclipse的Package explorer中 如下图所示 Source folder 存放Java的源代码 eclipse会自动编译里面的文件 以 来进行文件夹的分级 默认为src文件夹 Package 一般位于source fol
  • 【深度学习】 Python 和 NumPy 系列教程(六):Python容器:4、字典Dictionary详解(初始化、访问元素、常用操作、常用函数、遍历、解析)

    目录 一 前言 二 实验环境 三 Python容器 Containers 0 容器介绍 4 字典 Dictionary 0 基本概念 1 初始化 a 使用 创建字典 b 使用dict 函数创建字典 2 访问字典元素 a 使用方括号 b 使用
  • nexus下载安装

    进入官网http www sonatype org 点击Jion Now 展开downloads 选择Nexus Repository Manager OSS 目前已经更新到3 X了 这里暂且还是选2 X的吧 下载完 解压 cmd打开命令提
  • 【软件工程】第五章 结构化设计

    5 1 结构化设计的概念 5 1 1 设计的定义 何谓设计 一种软件开发活动 定义实现需求规约所需的软件结构 目标 依据需求规约在一个抽象层上建立系统软件模型 包括软件体系结构 数据和程序结构 以及详细的处理算法 给出软件解决方案 产生设计
  • 欧拉回路【总结】【题解】

    题目 欧拉回路 UOJ 欧拉回路 Liuser s OJ 题目描述 有一天一位灵魂画师画了一张图 现在要你找出欧拉回路 即在图中找一个环使得每条边都在环上出现恰好一次 一共两个子任务 无向图 有向图 输入格式 第一行一个整数 t 表示子任务
  • vue项目启动后,js-base64依赖报错Cannot read properties of null (reading ‘replace’)

    cannot read properties of null reading replace 关于这种乱七八糟的问题 咱也不敢说 在哪也不敢问 项目运行之后 有一些警告 都是一些依赖版本的问题 平时也能直接给运行起来 这次就是项目可以运行起
  • rabbitmq+springboot实现幂等性操作

    文章目录 1 场景描述 1 1 场景1 1 2 场景2 2 原理 3 实战开发 3 1 建表 3 2 集成mybatis plus 3 3 集成RabbitMq 3 3 1 安装mq 3 3 2 springBoot集成mq 3 4 具体实

随机推荐

  • 阿里云服务器使用xshell连接

    阿里云服务器使用xshell连接 当购买了第一次阿里云服务器时 如何使用xshell连接 其实是非常简单的 1 登录阿里云控制台 1 是你的阿里云服务器所在地址 2 是公网IP 将来远程连接时需要使用 3 是设置远程连接的密码 用户名默认r
  • 在x86和arm编译libmodbus

    编译libmodbus 下载路径 1 编译准备 sudo apt get install libtool autogen sh 2 arm编译 autogen sh mkdir install configure ac cv func ma
  • 电压电流的驱动能力分析以及计算方法

    文章为笔者学习过程中看到的 感觉帮助较大 分享出来希望能帮助到大家 在电子电路中为什么有的地方电压会被拉低2 驱动能力是什么意思 如何提高驱动能力 在很多资料上看到说驱动能力不够是因为提供的电流太小 为什么不说电压呢 在很多限制的条件都是电
  • BIOS开启虚拟化技术

    什么是BIOS BIOS 是一个内置于个人计算机的程序 当您打开计算机时该程序启动操作系统 也称为系统固件 BIOS 是计算机硬件的一部分 不同于 Windows 怎么进入BIOS 电脑进入BIOS的方法各有不同 通常会在开机时 显示电脑l
  • atoi函数源代码

    atoi函数源代码 isspace int x if x x t x n x f x b x r return 1 else return 0 isdigit int x if x lt 9 x gt 0 return 1 else ret
  • CPU是如何读写内存的?

    如果你不知道CPU是如何读写内存的 那你应该好好看看这篇文章 如果你觉得这是一个非常简单的问题 那你更应该好好读读本文 这个问题绝没有你想象那么简单 一定要读完 闲话少说 让我们来看看CPU在读写内存时底层究竟发生了什么 1 谁来告诉CPU
  • Mybatis二级缓存应用场景和局限性

    二级缓存应用场景 对查询频率高 变化频率低的数据建议使用二级缓存 对于访问多的查询请求且用户对查询结果实时性要求不高 此时可采用mybatis二级缓存技术降低数据库访问量 提高访问速度 业务场景比如 耗时较高的统计分析sql 电话账单查询s
  • ChatGPT是否具有记忆能力?

    ChatGPT在某种程度上具有记忆能力 但它的记忆能力有限且不像人类的记忆那样全面和持久 以下是对ChatGPT的记忆能力的详细分析 1 上下文记忆 ChatGPT可以在对话过程中记住先前的对话历史 以便更好地理解和回应后续的问题 通过将上
  • 带你了解并实践monorepo和pnpm,绝对干货!熬夜总结!

    大厂技术 高级前端 Node进阶 点击上方 程序员成长指北 关注公众号 回复1 加入高级Node交流群 为什么使用monorepo 什么是monorepo 简单来说就是 将多个项目或包文件放到一个git仓库来管理 目前比较广泛应用的是yar
  • java面试笔试基本知识点总结

    1 正则表达式 正则表达式定义了字符串的模式 正则表达式可以用来搜索 编辑或处理文本 正则表达式并不仅限于某一种语言 但是在每种语言中有细微的差别 在编写处理字符串的程序时 经常会有查找符合某些复杂规则的字符串的需要 正则表达式就是用于描述
  • hikaricp druid比较_Spring Boot整合MybatisPlus和Druid

    在Java中 我比较ORM熟悉的只有Hibernate和Mybatis 其他的并未实践使用过 在这二者之间我更喜欢Mybatis 因为它精简 灵活 毕竟我是上年纪的程序员 喜欢自己写SQL 刚才有提到Mybatis 但是这里的重点是介绍My
  • 应用APK文件有效瘦身

    先说下前言 为什么要这样处理 随着项目的越来越多丰富功能 打包出来的apk体积日益变大 不说打包耗时 编译耗时 发布到应用市场 用户下载流量多 而且手机空间那么有限 用户不满意 咱们就要进行改变呗 没有体验 就没有用户 我先贴一张图 演示项
  • Python常用命令整理

    Anaconda常用命令 1 管理Conda 1 检查conda版本 conda version 2 升级当前版本conda conda update conda 2 管理 虚拟 环境 1 创建环境 创建一个名为python3的环境 指定P
  • Visual Studio 安装检测内存工具-Visual Leak Detetctor。(适用于VS2013、VS2015、VS2017、VS2019、VS2022版本)

    目录 前言 Visual Leak Detetctor 外部安装VLD 安装包 配置VLD 查看相关文件 将VLD配置到C 项目中 创建一个C 的空工程 配置头文件 配置lib库 测试Visual Leak Detetctor 前言 如果你
  • Got permission denied while trying to connect to the Docker daemon socket

    docker权限问题 需要将当前用户添加到docker组 sudo groupadd docker 添加docker用户组 sudo gpasswd a XXX docker 检测当前用户是否已经在docker用户组中 其中XXX为用户名
  • Mac 下 Arduino 开发环境搭建

    文章目录 Mac 下 Arduino 开发环境搭建 驱动 Arduino 安装 Arduino IDE 使用 Arduino IDE 准备跑路 VS Code 安装 VS Code 安装 Arduino 扩展 安装 C C 扩展 开始开发
  • 剑指Offer第二十七题:字符串的排列

    题目描述 输入一个字符串 按字典序打印出该字符串中字符的所有排列 例如输入字符串abc 则打印出由字符a b c所能排列出来的所有字符串abc acb bac bca cab和cba 思路 感觉是动态规划题 假设选第一个元素时 对于abc有
  • Redis+Lua限制发送量及遇到的坑

    业务中需要限制每个账号每天发送短信数量 如果没有超过设置的发送量 则正常发送 否则返回失败 解决思路 将账号ID yyyyMMdd组成redis的key value为当天的发送量 在发送前获取账号ID yyyyMMdd的值 如果没有超过发送
  • MachineLearningWu_13/P60-P64_Tensorflow

    P60 P64的学习目录如下 x 1 TF网络模型实现 以一个简单的TF的分类网络为例 将模型翻译成框架下的语义 即如右侧所表达的 当然上面对于分类网络的解释是一个简洁的解释 我们来进行更加具象的了解一下 左边是机器学习的三步骤 1 给定输
  • next_permutation 函数的使用 poj1256

    next permutation全排列函数是一个十分好用而且强大的函数 要想更好的了解这个函数可以看https blog csdn net howardemily article details 68064377 个人感觉写的特别好 里面有