2018杭电多校第五场1002(暴力DFS【数位】,剪枝)
//never use translation
#include<bits/stdc++.h>
using namespace std;
int k;
char a[20];//储存每个数的数值
int times[20];//mn次数
int timess[20];//mx次数
int len;
int mn;
int mx;
int kk,sum;
void solve()
{
kk=0,sum=0;
if(a[times[1]]==0)
return;
for(int i=1;i<=len;i++)
timess[i]=times[i];//储存现在的数位情况,times因排序而发生递增
for(int i=1;i<=len;i++)
{
sum=sum*10+a[times[i]];//记录按照数位变化而产生的数值
if(timess[i]!=i)//该位置发生变动
{
for(int j=i+1;j<=len;j++)
{
if(timess[j]==i)//找到和前面发生变动的数字exchange的数位
{
swap(timess[i],timess[j]);//交换以免在后续的查找中将交换的数位查找两次
kk++;//查找次数++
if(kk>k)
return;
break;//寻找下一个发生变动的数位
}
}
}
}
if(kk>k)
return;
mx=max(mx,sum);
mn=min(mn,sum);
return;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s%d",a+1,&k);
len=strlen(a+1);
if(len==10)
printf("1000000000 1000000000\n");//剪枝
else
{
memset(times,0,sizeof(times));
memset(timess,0,sizeof(timess));
for(int i=1;i<=len;i++)
{
a[i]-='0';
times[a[i]]++;
timess[a[i]]++;//计数
}
if(k>=len-1)//剪枝
{
for(int i=1;i<=9;i++)//第一位非零
{
if(times[i])
{
printf("%d",i);
times[i]--;
break;
}
}
for(int i=0;i<=9;i++)
{
while(times[i])//将所有数全部贪心输出
{
printf("%d",i);
times[i]--;
}
}
printf(" ");
for(int i=9;i>=1;i--)//和上面反着来
{
if(timess[i])
{
printf("%d",i);
timess[i]--;
break;
}
}
for(int i=9;i>=0;i--)
{
while(timess[i])
{
printf("%d",i);
timess[i]--;
}
}
printf("\n");
}
else//还有一种利用暴力dfs的方法是最初的想法,听完讲解后觉得按照数位全排列技巧性高一点
{
mx=0,mn=1e10;//反向设定最值
for(int i=1;i<=len;i++)
{
times[i]=i;//记录原始数位
}
do
{
solve();
}while(next_permutation(times+1,times+1+len));//至少进行一次更新最值
//全排列函数按照字典序寻找下一种情况,这里按照数位从最小的1~n开始枚举到n~1
//prev_permutation按照字典序寻找上一种情况
printf("%d %d\n",mn,mx);
}
}
}
return 0;
}
//遇见数字较大然而问题和单独的数有关时联想可否用数位思想解决,数位和数之间建立联系,数位处理问题时较为简单便利
2018杭电多校第五场1002(暴力DFS【数位】,剪枝)的更多相关文章
- 2018杭电多校第六场1009(DFS,思维)
#include<bits/stdc++.h>using namespace std;int a[100010];char s[20];int zhiren[100010];vector& ...
- hdu6356 Glad You Came 杭电多校第五场 RMQ ST表(模板)
Glad You Came Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...
- 2018杭电多校第三场1003(状态压缩DP)
#include<bits/stdc++.h>using namespace std;const int mod =1e9+7;int dp[1<<10];int cnt[1& ...
- 2017杭电多校第五场11Rikka with Competition
Rikka with Competition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- 2017杭电多校第五场Rikka with Subset
Rikka with Subset Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- [2019杭电多校第五场][hdu6630]permutation 2
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6630 题意为求出1-n,n个数的全排列中有多少种方案满足第一位为x,第n位为y,且相邻数字绝对值之差不 ...
- [2019杭电多校第五场][hdu6624]fraction
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6624 题意为求最小的b满足$a*b^{-1}\equiv x(modp)$. 把式子化简一下: $a\ ...
- [2019杭电多校第五场][hdu6629]string matching(扩展kmp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6629 题意求字符串的每个后缀与原串的最长公共前缀之和. 比赛时搞东搞西的,还搞了个后缀数组...队友一 ...
- [2019杭电多校第五场][hdu6628]permutation 1
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6628 题意为求字典序第k小的差异数组,差异数组p满足p[i]=a[i+1]-a[i]. 头铁的爆搜,因 ...
随机推荐
- idea中java异常
1. Compilation failed: internal java compiler error 解决方案:File-->Setting...-->Build,Execution,D ...
- 2017各银行贷款利息表及P2P平台贷款利率比较
银行贷款利息是多少?2017各银行贷款利息表及P2P平台贷款利率比较 发表时间: 2017-02-17 作者: 一.2017央行贷款基准率 各个银行的贷款利率是以中国银行的人民币贷款基准率为标准进行上 ...
- Spring源码分析_01_ idea搭建spring源码阅读环境
二.参考资料 1.Intellij Idea如何导入spring源码
- Gym - 100570E:Palindrome Query (hash+BIT+二分维护回文串长度)
题意:给定字符串char[],以及Q个操作,操作有三种: 1:pos,chr:把pos位置的字符改为chr 2:pos:问以pos为中心的回文串长度为多长. 3:pos:问以pos,pos+1为中心的 ...
- elasticsearch监控平台cerebro-0.8.3 相关操作
上面这个平台是cerebro-0.8.3 在github上找就有了 #################### GET /hnscan_source_o_comm_drv_bad_bhv_occur/ ...
- 脚本手动执行正常,放cron中执行有问题的原因
问题原因: 1. crond服务没启动 2. 环境变量如 PATH LANG SHELL 等设置不对 3. 脚本中引用的文件地址是相对路径,而非绝对路径. 排查步骤: 以 check ...
- ACM学习历程—HDU5521 Meeting(图论)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是一个人从1开始走,一个人从n开始走.让最 ...
- Git 系列之tag的用法---为你的代码标记版本号
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 本地仓库操作 远程仓库操作 其他 tag 操作 在做app开发的时候经常有版本的概念,比如v1.0.v1.1之类的,不同 ...
- web攻击之八:溢出攻击(nginx服务器防sql注入/溢出攻击/spam及禁User-agents)
一.什么是溢出攻击 首先, 溢出,通俗的讲就是意外数据的重新写入,就像装满了水的水桶,继续装水就会溢出,而溢出攻击就是,攻击者可以控制溢出的代码,如果程序的对象是内核级别的,如dll.sys文件等,就 ...
- pycharm安装 package报错:module 'pip' has no attribute 'main'
转自: <pycharm安装 package报错:module 'pip' has no attribute 'main'> https://www.cnblogs.com/Fordest ...