HDU 6351 Beautiful Now(DFS)多校题解
思路:一开始对k没有理解好,题意说交换k次,如果我们不需要交换那么多,那么可以重复自己交换自己,那么k其实可以理解为最多交换k次。这道题dfs暴力就行,我们按照全排列最大最小去找每一位应该和后面哪一位交换。k = 0没判断好WA了2发...
如果k >= len - 1,那么最大最小就是直接sort非前导零的答案。如果k < len - 1,那么我们交换肯定从最大位数交换,比如现在求最大值,那么我们从第一位依次判断,如果该位不是他后面最大的,那么就和后面最大的交换(如果最大的有多个,那么就每个都搜索一下),否则不消耗交换次数判断下一位。最小同理
注意前导零。
代码:
#include<cstdio>
#include<set>
#include<map>
#include<cmath>
#include<stack>
#include<vector>
#include<queue>
#include<cstring>
#include<string>
#include<sstream>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = +;
const int INF = 0x3f3f3f3f;
int bit[];
ll pos,k,Max,Min;
ll MIN[],MAX[];
ll get_num(int a[]){
ll ans = ;
for(int i = ;i <= pos;i++){
ans = ans * + a[i];
}
return ans;
}
void dfs_max(int a[],int rt,int tim){
if(tim == k){
Max = max(Max,get_num(a));
return;
}
if(rt == pos){
Max = max(Max,get_num(a));
return;
}
if(a[rt] == MAX[rt]){
Max = max(Max,get_num(a));
dfs_max(a,rt + ,tim);
}
else{
for(int i = rt + ;i <= pos;i++){
if(a[i] != MAX[rt]) continue;
swap(a[rt],a[i]);
Max = max(Max,get_num(a));
dfs_max(a,rt + ,tim + );
swap(a[rt],a[i]);
}
} }
void dfs_min(int a[],int rt,int tim){
if(tim == k){
Min = min(Min,get_num(a));
return;
}
if(rt == pos){
Min = min(Min,get_num(a));
return;
}
if(a[rt] == MIN[rt]){
Min = min(Min,get_num(a));
dfs_min(a,rt + ,tim);
}
else{
for(int i = rt + ;i <= pos;i++){
if(a[i] != MIN[rt]) continue;
swap(a[rt],a[i]);
Min = min(Min,get_num(a));
dfs_min(a,rt + ,tim + );
swap(a[rt],a[i]);
}
} }
int main(){
int T;
char n[];
scanf("%d",&T);
while(T--){
scanf("%s%d",n,&k);
pos = strlen(n);
for(int i = ;i < pos;i++){
bit[i + ] = n[i] - '';
}
for(int i = ;i <= pos;i++){
MIN[i] = bit[i];
}
sort(MIN + ,MIN + pos + );
for(int i = ;i <= pos;i++){
MAX[i] = MIN[pos - i + ];
}
if(MIN[] == ){
int p = ;
while(MIN[p] == ){
p++;
}
swap(MIN[],MIN[p]);
}
Max = ,Min = INF;
k = min(k,pos - );
dfs_max(bit,,);
dfs_min(bit,,);
printf("%lld %lld\n",Min,Max);
}
return ;
}
HDU 6351 Beautiful Now(DFS)多校题解的更多相关文章
- 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 ...
- HDU 6351 (Beautiful Now) 2018 Multi-University Training Contest 5
题意:给定数N(1<=N<=1e9),k(1<=k<=1e9),求对N的任意两位数交换至多k次能得到的最小与最大的数,每一次交换之后不能出现前导零. 因为N最多只有10位,且给 ...
- HDU 1401 Solitaire 双向DFS
HDU 1401 Solitaire 双向DFS 题意 给定一个\(8*8\)的棋盘,棋盘上有4个棋子.每一步操作可以把任意一个棋子移动到它周围四个方向上的空格子上,或者可以跳过它四个方向上的棋子(就 ...
- HDOJ(HDU).2660 Accepted Necklace (DFS)
HDOJ(HDU).2660 Accepted Necklace (DFS) 点我挑战题目 题意分析 给出一些石头,这些石头都有自身的价值和重量.现在要求从这些石头中选K个石头,求出重量不超过W的这些 ...
- HDOJ(HDU).1045 Fire Net (DFS)
HDOJ(HDU).1045 Fire Net [从零开始DFS(7)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HD ...
- HDOJ(HDU).1241 Oil Deposits(DFS)
HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...
- HDOJ(HDU).1035 Robot Motion (DFS)
HDOJ(HDU).1035 Robot Motion [从零开始DFS(4)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DF ...
- HDU 1501 Zipper 【DFS+剪枝】
HDU 1501 Zipper [DFS+剪枝] Problem Description Given three strings, you are to determine whether the t ...
随机推荐
- MQTT协议笔记之mqtt.io项目Websocket协议支持
前言 MQTT协议专注于网络.资源受限环境,建立之初不曾考虑WEB环境,倒也正常.虽然如此,但不代表它不适合HTML5环境. HTML5 Websocket是建立在TCP基础上的双通道通信,和TCP通 ...
- 关于font-size对垂直居中影响的问题
背景:三个inline-block元素,其中两个内容为空,另外一个包含文字,设置文字的font-size之后,原本垂直居中的三个inline-block的元素,会变的不再垂直居中. 原因: 当设置了f ...
- ios8 gps定位不好用
这样让iOS8正常使用定位功能呢? <1>你需要在info.plist表里面添加两条变量 在Info.plist中加入两个缺省没有的字段 NSLocationAlwaysUsageDesc ...
- Android通知栏的高度获取
public static int getStatusBarHeight(Context context){ Class<?> c = null; Object obj = null; F ...
- C语言实现日历输出
这个还是挺实用的.... 头文件: #ifndef MAIN_H #define MAIN_H #include "stdio.h" #include "math.h&q ...
- html 标准属性不要用 setAttribute 方法
html 中有些属性,譬如 checked , autofocus 只要存在就会有效,即使值是 false ,譬如: <input autofocus=false id='test'> & ...
- SaltStack部署redis主从
需求: 一,部署redis主从,一台主一台从 二,redis监听自己的IP地址,而不是0.0.0.0 主:安装,配置,启动 从:安装,配置,启动,主从
- poj3171 Cleaning Shifts【线段树(单点修改区间查询)】【DP】
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4422 Accepted: 1482 D ...
- Database Sharding Challenges DATABASE SHARDING
w分布式查询.数据聚合.跨碎片join是可且应避免的.自增主键管理.基于-会话/事务/语句-选择碎片.通过-主键/模块/碎片索引-碎片化数据 http://www.agildata.com/datab ...
- Django框架【基础篇】
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...