HDU6351 Beautiful Now(2018HDU多校联赛第五场,思路)

2023-10-05 23:00

本文主要是介绍HDU6351 Beautiful Now(2018HDU多校联赛第五场,思路),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem Description

Anton has a positive integer n, however, it quite looks like a mess, so he wants to make it beautiful after k swaps of digits.
Let the decimal representation of n as (x1x2xm)10 ( x 1 x 2 ⋯ x m ) 10 satisfying that 1x19 1 ≤ x 1 ≤ 9 , which means n=mi=1xi10mi n = ∑ i = 1 m x i 10 m − i . In each swap, Anton can select two digits xi and xj (1ijm) ( 1 ≤ i ≤ j ≤ m ) and then swap them if the integer after this swap has no leading zero.
Could you please tell him the minimum integer and the maximum integer he can obtain after k swaps?

Input

The first line contains one integer T, indicating the number of test cases.
Each of the following T lines describes a test case and contains two space-separated integers n and k.
1T100 1 ≤ T ≤ 100 , 1n,k109 1 ≤ n , k ≤ 10 9

Output

For each test case, print in one line the minimum integer and the maximum integer which are separated by one space.

Sample Input

5
12 1
213 2
998244353 1
998244353 2
998244353 3

Sample Output

12 21
123 321
298944353 998544323
238944359 998544332
233944859 998544332

思路

给出t组数据,然后每组数据给出一个nk,你每次可以交换任意两个数,总的交换次数不超过k次,问你在规定的次数之内这个数可以变成的最大值和最小值是多少(注意特判前导0).

因为一个数字顶多有9位,所以我们可以全排列暴力枚举排列数,复杂度就是 9! 9 ! ,每次枚举一个排列,计算出交换的次数如果符合条件就进行最大最小值处理。那么如何计算一个数交换几次可以变成另一个数,交换的数字必定会连成一个环,那么每个环需要交换的次数就是环内的元素个数减去1,(具体可以百度关键字使序列有序的最小交换次数)。

但是在本题中由于存在数字重复的问题,我们可以对于1到9所有的位数,提前预处理,存储一下经过多少次变换每个位置会变成什么,因为位置是不可能重复的。最后枚举一下从1~k的次数,然后转换成具体的数字求最大最小值。

代码

#include <bits/stdc++.h>
using namespace std;
#define mem(a, b) memset(a, b, sizeof(a))
const int N = 1e6 + 10;
const int inf = 999999999;
vector<int> pre[10][10]; //pre[i][j]表示i位,交换次数为j的集合
int a[10], vis[10];
void init()
{for (int k = 1; k <= 9; k++){for (int i = 1; i <= k; i++)a[i] = i;do{mem(vis, 0);int now = 0;for (int i = 1; i <= k; i++)now = now * 10 + a[i];int tmp = 0; //计算出变换需要的次数for (int i = 1; i <= k; i++)if (!vis[i]){vis[i] = 1;for (int j = a[i]; j != i; j = a[j]){vis[j] = 1;tmp++;}}pre[k][tmp].push_back(now);} while (next_permutation(a + 1, a + k + 1));}
}
int get_num(int n)
{int ans = 0;int tmp = 1;while (n){ans += a[n % 10] * tmp;n /= 10;tmp *= 10;}return ans;
}
char s[20];
void solve()
{int k;scanf("%s%d", s, &k);int n = strlen(s);if (n == 10){printf("1000000000 1000000000\n");return;}if (k >= n)k = n - 1;for (int i = 1; i <= n; i++)a[i] = s[i - 1] - '0';int maxx = 0, minn = inf;int l = 1;for (int i = 1; i < n; i++) //防止前导0l *= 10;for (int i = 0; i <= k; i++) //枚举所有的交换次数{for (auto num : pre[n][i]){int now = get_num(num); //根据位来获取值if (now < l)continue; //去除前导0maxx = max(maxx, now);minn = min(minn, now);}}printf("%d %d\n", minn, maxx);
}
int main()
{// freopen("in.txt", "r", stdin);init();int t;scanf("%d", &t);while (t--)solve();return 0;
}

这篇关于HDU6351 Beautiful Now(2018HDU多校联赛第五场,思路)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

如何打造个性化大学生线上聊天交友系统?Java SpringBoot Vue教程,2025最新设计思路

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录

将添加功能的抽屉剥离,在父组件调用思路

一、新建组件 新建AddRoleEditerDrawer.vue <template><div><el-drawer v-model="dialog" title="添加角色" :before-close="handleClose" direction="rtl" @colse="cancelForm"class="demo-drawer" modal-class="add-drawer">

[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

题目来源 NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。https://www.nssctf.cn/problem   [SWPUCTF 2021 新生赛]gift_F12 这个题目简单打开后是一个网页  我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索c

.Net Mvc-导出PDF-思路方案

效果图: 导语:     在我们做项目的过程中,经常会遇到一些服务性的需求,感到特别困扰,明明实用的价值不高,但是还是得实现;     因此小客在这里整理一下自己导出PDF的一些思路,供大家参考。     网上有很多导出PDF运用到的插件,大家也可以看看其他插件的使用,学习学习; 提要:     这里我使用的是-iTextSharp,供大家参考参考,借鉴方案,完善思路,补充自己,一起学习

.net MVC 导出Word--思路详解

序言:          一般在项目的开发过程中,总会接收到一个个需求,其中将数据转换成Work来下载,是一个很常见的需求;          那么,我们改如何处理这种需求,并输出实现呢?          在做的过程中,去思考 1、第一步:首先确认,Work的存在位置,并创建字符输出路:             //在的项目中创建一个存储work的文件夹             string

【POJ】Buy Tickets(思路 + 线段树)

一开始没有思路,之后问了一下学长,需要逆向处理输入。 最后一个加入队列的肯定是没有冲突的,所以我们可以从最后一个开始处理,从后往前,找第 i + 1个空着的地方。 线段树的话记录 区间中 空白位置的个数。 134418332013010521002828Accepted5368K1704MSC++1690B2014-09-14 21:19:45 #include<iost