Beautiful Now

Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 0    Accepted Submission(s): 0

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 (x1x2⋯xm)10 satisfying that 1≤x1≤9, 0≤xi≤9 (2≤i≤m), which means n=∑mi=1xi10m−i. In each swap, Anton can select two digits xi and xj (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.
1≤T≤100, 1≤n,k≤109.
 
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
枚举每种交换情况,分别取最大和去最小,记得特判前导零
AC代码:
#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
#define ls (r<<1)
#define rs (r<<1|1)
#define debug(a) cout << #a << " " << a << endl
using namespace std;
typedef long long ll;
const ll maxn = 1e2+10;
const ll mod = 998244353;
const double pi = acos(-1.0);
ll n, m;
bool cmp( char p, char q ) {
return p > q;
}
string strmin, strmax, s, tmin, tmax;
void dfs1( ll x, ll cnt, string t ) {
if( cnt > n-1 || x == t.length()-1 ) {
//debug(cnt), debug(tmin), debug(strmin), debug(t);
strmin = min(strmin,t);
return ;
}
if( t[x] == tmin[x] ) {
dfs1(x+1,cnt,t);
return ;
}
char c = 'a';
for( ll i = x+1; i < t.length(); i ++ ) {
if( t[i] <= c ) {
if( x == 0 && t[i] == '0' ) {
continue;
}
c = t[i];
}
}
if( c == 'a' ) {
dfs1(x+1,cnt,t);
return ;
}
for( ll i = x+1; i < t.length(); i ++ ) {
if( t[i] == c ) {
swap(t[i],t[x]);
dfs1(x+1,cnt+1,t);
swap(t[i],t[x]);
}
}
}
void dfs2( ll x, ll cnt, string t ) {
if( cnt > n-1 || x == t.length()-1 ) {
//debug(cnt), debug(tmax), debug(strmax), debug(t);
strmax = max(strmax,t);
return ;
}
if( t[x] == tmax[x] ) {
dfs2(x+1,cnt,t);
return ;
}
char c = '0';
bool flag = true;
for( ll i = x+1; i < t.length(); i ++ ) {
if( t[i] >= c ) {
c = t[i];
flag = false;
}
}
for( ll i = x+1; i < t.length(); i ++ ) {
if( t[i] == c ) {
swap(t[i],t[x]);
dfs2(x+1,cnt+1,t);
swap(t[i],t[x]);
}
}
}
string rev( string s ) {
string t = "";
for( ll i = 0, j = s.length()-1; i < s.length(); i ++, j -- ) {
t = t + s[j];
}
return t;
}
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
ll T, t = 1;
cin >> T;
while( T -- ) {
s = "";
ll j = 0;
cin >> m >> n;
while(m) {
char c = (m%10)+'0';
s = s + c;
m /= 10;
}
s = rev(s);
tmin = s, tmax = s;
sort(tmin.begin(),tmin.end());
sort(tmax.begin(),tmax.end(),cmp);
if( tmin[0] == '0' ) {
char c = 'a';
ll inx = -1;
for( ll i = 1; i < tmin.length(); i ++ ) {
if( tmin[i] != '0' && tmin[i] < c ) {
c = tmin[i];
inx = i;
}
}
if( inx != -1 ) {
swap(tmin[inx],tmin[0]);
}
}
if( n >= s.length()-1 ) {
cout << tmin << " " << tmax << endl;
} else {
strmin = s;
dfs1(0,0,strmin);
strmax = s;
dfs2(0,0,strmax);
cout << strmin << " " << strmax << endl;
}
}
return 0;
}
/*
123112 2
111322 322111
10001 2
*/

  

hdu6351 Beautiful Now 杭电第五场 暴力枚举的更多相关文章

  1. hdu6354 杭电第五场 Everything Has Changed 计算几何

    Everything Has Changed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java ...

  2. hdu6373 Pinball 杭电第六场 物理知识

    Pinball Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total S ...

  3. 杭电第四场 hdu6336 Problem E. Matrix from Arrays 打表找规律 矩阵前缀和(模板)

    Problem E. Matrix from Arrays Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 ...

  4. 杭电第六场 hdu6362 oval-and-rectangle 积分求期望

    oval-and-rectangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  5. 喝奶茶最大值(不能喝自己班级的)2019 Multi-University Training Contest 8--hdu杭电第8场(Roundgod and Milk Tea)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6667 题意: 有 n个班级,每个班级有a个人.b个奶茶,每个班的人不能喝自己的奶茶,只能喝别人班的奶茶 ...

  6. hdu 1290_献给杭电五十周年校庆的礼物

    Description 或许你曾经牢骚满腹或许你依然心怀忧伤或许你近在咫尺或许你我天各一方 对于每一个学子母校 永远航行在生命的海洋 今年是我们杭电建校五十周年,这是一个值得祝福的日子.我们该送给母校 ...

  7. HDU 1290 献给杭电五十周年校庆的礼物(面分割空间 求得到的最大空间数目)

    传送门: 献给杭电五十周年校庆的礼物 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. [HDU1290]献给杭电五十周年校庆的礼物

    [HDU1290]献给杭电五十周年校庆的礼物 题目大意: 问\(n(n\le1000)\)个平面能够将一个三维空间分成几部分. 思路: 公式\(\frac{n^3+5n+6}6\). 源代码: #in ...

  9. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

随机推荐

  1. File signature analysis fails to recognize .old file

    My friend May she found a strange file called "bkp.old" as below in the evidence files. Sh ...

  2. java8中用流收集数据

    用流收集数据 汇总 long howManyDishes = menu.stream().collect(Collectors.counting()); int totalCalories = men ...

  3. 简单聊聊红黑树(Red Black Tree)

    ​ 前言 众所周知,红黑树是非常经典,也很非常重要的数据结构,自从1972年被发明以来,因为其稳定高效的特性,40多年的时间里,红黑树一直应用在许多系统组件和基础类库中,默默无闻的为我们提供服务,身边 ...

  4. JavaScript数据结构——字典和散列表的实现

    在前一篇文章中,我们介绍了如何在JavaScript中实现集合.字典和集合的主要区别就在于,集合中数据是以[值,值]的形式保存的,我们只关心值本身:而在字典和散列表中数据是以[键,值]的形式保存的,键 ...

  5. 先定一个小目标:10天自学C语言编程,教你如何改变一生

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  6. Extjs4 combobox hiddenName 后台取不到值

    当我们用 下拉框传值时,有一个问题,就是他有两个值,一个是用来显示的,一个是我们实际往后台需要传递的值,即 name 与 value 所以 combobox 才有了 hiddenName 这个属性,他 ...

  7. 控制台基于Quartz.Net组件实现定时任务调度(一)

    前言: 你曾经需要应用执行一个任务吗?比如现在有一个需求,需要每天在零点定时执行一些操作,那应该怎样操作呢? 这个时候,如果你和你的团队是用.NET编程的话,可以考虑使用Quartz.NET调度器.允 ...

  8. 最简单的DWR例子

    什么是DWR? DWR是一个Open Source的 java项目.DWR可以让JavaScript调用运行在Web服务器里面的JAVA程序.简单一点或者专业一点就是Easy AJAX for JAV ...

  9. dns自动配置shell脚本

    代码: #!/bin/bash #获取url echo "url:" read url #获取ip echo "ip:" read ip #向/etc/name ...

  10. H5中的history方法Api介绍

    最近公司在做一个微信公众号,看了项目源码,看到项目中用到了history的Api来进行控制浏览器的历史记录及前进/后退键: 下面来跟大家一起来捋捋history的Api方法和使用: history.p ...