HDU 6351 (Beautiful Now) 2018 Multi-University Training Contest 5
题意:给定数N(1<=N<=1e9),k(1<=k<=1e9),求对N的任意两位数交换至多k次能得到的最小与最大的数,每一次交换之后不能出现前导零。
因为N最多只有10位,且给了2500ms,当时觉得可以枚举全排列,再判断前导零和最少交换次数。
最少交换次数是(每个循环节中的个数-1)之和。
当时想的是全排列N的每位数,但是这样会出现一个问题:N中可能出现相同的数,这样求循环节中元素个数就会很困难。‘
其实应该对下标进行全排列,因为下标是不可能相同的,这样就可以O(len) 地计算出每个排列的最少交换次数。然后取符合条件的最小最大的数为答案。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn =;
const LL INF= (1LL)<<;
int k,len;
int pos[maxn];
int num[maxn];
bool vis[maxn]; int check(){
memset(vis,,sizeof(vis));
int cnt =;
for(int i=;i<len;++i){
if(vis[i]) continue;
int tmp=;
while(!vis[i]){
tmp++;
vis[i]=;
i = pos[i];
}
cnt += tmp-;
if(cnt>k) return ;
}
return cnt;
} char str[maxn];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int T;
scanf("%d",&T);
while(T--){
memset(str,,sizeof(str));
scanf("%s %d",str,&k);
len = strlen(str);
LL N=;
for(int i=;i<len;++i) num[i] = str[i]-'',pos[i]=i,N = N*+num[i];
LL ans1= N,ans2=N;
do{
if(num[pos[]]!= && check()){
LL tmp =;
for(int i=;i<len;++i){
tmp*=;
tmp+= num[pos[i]];
}
if(tmp<ans1) ans1=tmp;
if(tmp>ans2) ans2=tmp;
}
}while(next_permutation(pos,pos+len));
printf("%lld %lld\n",ans1,ans2);
}
return ;
}
HDU 6351 (Beautiful Now) 2018 Multi-University Training Contest 5的更多相关文章
- HDU 6351.Beautiful Now-暴力、全排列、思维 (2018 Multi-University Training Contest 5 1002)
2018 Multi-University Training Contest 5 6351.Beautiful Now 题意就是交换任意两个数字,问你交换k次之后的最小值和最大值. 官方题解: 哇塞, ...
- HDU - 6351 Beautiful Now
Beautiful Now HDU - 6351 Anton has a positive integer n, however, it quite looks like a mess, so he ...
- HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)
Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5
思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...
- HDU 6125 - Free from square | 2017 Multi-University Training Contest 7
思路来自这里 - - /* HDU 6125 - Free from square [ 分组,状压,DP ] | 2017 Multi-University Training Contest 7 题意 ...
- HDU 6129 - Just do it | 2017 Multi-University Training Contest 7
比赛时脑子一直想着按位卷积... 按题解的思路: /* HDU 6129 - Just do it [ 规律,组合数 ] | 2017 Multi-University Training Contes ...
- HDU 6088 - Rikka with Rock-paper-scissors | 2017 Multi-University Training Contest 5
思路和任意模数FFT模板都来自 这里 看了一晚上那篇<再探快速傅里叶变换>还是懵得不行,可能水平还没到- - 只能先存个模板了,这题单模数NTT跑了5.9s,没敢写三模数NTT,可能姿势太 ...
- HDU 6093 - Rikka with Number | 2017 Multi-University Training Contest 5
JAVA+大数搞了一遍- - 不是很麻烦- - /* HDU 6093 - Rikka with Number [ 进制转换,康托展开,大数 ] | 2017 Multi-University Tra ...
- HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5
看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...
随机推荐
- 【PM面试题】请设计一个老年人用的新闻App
考虑用户需求及痛点 老年人由于特殊的生理特点,需要考虑其阅读的痛点,加入例如文字大小自定义,朗读新闻,放大镜功能.同时在软件设计上减少文字的量,多放入一些多媒体的内容. 老年人会对过去发生的一些事情产 ...
- 目标跟踪之卡尔曼滤波---理解Kalman滤波的使用
http://www.cnblogs.com/jcchen1987/p/4371439.html
- IOS开发之自定义键盘
本文转载至 http://blog.csdn.net/majiakun1/article/details/41242069 实际开发过程中,会有自定义键盘的需求,比如,需要添加一个表情键盘.本文提供 ...
- Android 中替代 sharedpreferences 工具类的实现
Android 中替代 sharedpreferences 工具类的实现 背景 想必大家一定用过 sharedpreferences 吧!就我个人而言,特别讨厌每次 put 完数据还要 commit. ...
- JZOJ.5286【NOIP2017模拟8.16】花花的森林
Description
- JAVA环境变量配置备忘
jdk1.6以上就不需要配置classpath了:系统会自动帮你配置好 选择“高级”选项卡,点击“环境变量”:在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无 ...
- 【BZOJ4027】[HEOI2015]兔子与樱花 贪心
[BZOJ4027][HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组 ...
- JavaScript-rem字体自适应
给html标签上添加 id=“FontSize”: 你期望满屏的rem值,如: <html font-size:100px></html> 我的主要内容为1200px,那么我的 ...
- MySQL安装和Navicat安装、破解
1)mysql下载 地址:https://dev.mysql.com/downloads/mysql/ 2)一路next安装,安装好后文件目录如下(不包括data文件夹,my.ini文件) 3)新建文 ...
- Java 之包
作用: 对类文件进行分类管理, 类似于文件夹 给类提供多层命名(名称)空间 写在程序的第一行, 包名使用小写 类名的全称是: 包名.类名 包也是一种封装形式 // 示例 package mypack; ...