题意:给定一个数,和一个最多交换次数k,问在不超过k次操作的情况,问可以得到的最大值和最小值是多少?

个人解题的艰辛路程 , 开始是想到了暴力枚举的可能 , 打出来发现在判断枚举的数组与原来数组交换了多少次出现了错误 , 我们扫一遍枚举的数组于原来的数组不相同就往后面找到相同 , 但这个是不行的 , 这样必须是每一位数都不一样才可以 , 然后无耻的看了题解 , O!原来是枚举位置 ,  然后题解,超时了 , 想了想发现当k>cnt 的时候 ,是一定可以构成出来的 ,不需要枚举 , 所以加了这样Ala

#include<bits/stdc++.h>
using namespace std ;
int A[],a[],T[],sumMAX[],sumMIN[];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(sumMIN,,sizeof(sumMIN));
memset(sumMAX,,sizeof(sumMAX));
int x,k;
scanf("%d%d",&x,&k);
int cnt=;
while(x)
{ a[cnt++]=x%;
sumMAX[x%]++;sumMIN[x%]++;
x/=;
}
for(int i=cnt- ; i>= ; i--)
{
A[cnt--i]=a[i];
}
for(int i= ; i<cnt ; i++) a[i]=i;
int MIN=0x3f3f3f3f,MAX=-;
if(k>=cnt-)///剪枝
{
for(int i= ; i<= ; i++)///第一位排除0
{
if(sumMIN[i])
{
printf("%d",i);
sumMIN[i]--;
break;
}
}
for(int i= ; i<= ; i++)
{
while(sumMIN[i])
{
printf("%d",i);
sumMIN[i]--;
}
}
printf(" ");
for(int i= ; i>= ; i--)
{
while(sumMAX[i])
{
printf("%d",i);sumMAX[i]--;
}
}
puts("");continue;
}
do
{
int now=;
int ans=;
if(A[a[]]==) continue;
for(int i= ; i<cnt ; i++)
T[i]=a[i];
for(int i= ; i<cnt ; i++)
{
if(T[i]!=i)
{
now++;
if(now>k) break;
for(int j=i+ ; j<cnt ; j++)
{
if(T[j]==i)
{
swap(T[i],T[j]);break;
}
}
}
if(now>k) break;
ans=ans*+A[a[i]]; }
if(now<=k)
{
// printf("%d %d\n",ans,now);
MAX=max(MAX,ans) , MIN=min(MIN,ans);
}
} while(next_permutation(a,a+cnt));
printf("%d %d\n",MIN,MAX); }
}

最新文章

  1. Android -- EditText方法
  2. wdcp的安装扩展模块
  3. linux下的clock skew detected
  4. Ubuntu 之旅 —— 解决sudo: source: command not found错误
  5. cocos2d-x 关于tilemap滚动时黑线闪动的问题
  6. java03变量和基本数据类型
  7. C#中int32 的有效值范围
  8. JQ中的clone()方法与DOM中的cloneNode()方法
  9. Spark算子讲解(一)
  10. make: Nothing to be done for &#39;all&#39; 解决方法
  11. Java ORM Hibernate 入门笔记
  12. js 设备判断(移动端pc端 安卓ios 微信)
  13. Python学习之路&mdash;&mdash;&mdash;&mdash;&mdash;day04
  14. Mex-hdu4747(DP)
  15. 程序日志--ios“考反应扑克游戏”程序
  16. 【每日一题】Squares UVA - 201 暴力+输出坑 + 读文件模板
  17. 20155205 《Java程序设计》0510课上实践博客
  18. elasticSearch6源码分析(2)模块化管理
  19. linux下如何关闭防火墙、查看当前的状态、开放端口
  20. tomcat打开gzip、配置utf-8

热门文章

  1. SpringCloud02 Eureka知识点、Eureka服务端和客户端的创建、Eureka服务端集群、Eureka客户端向集群的Eureka服务端注册
  2. PCL struct“flann::SearchParams参数错误
  3. 在aspx页面中使用三元表达式
  4. Office Web APP预览如何去掉顶部版权标志“Microsoft Office Web Apps”
  5. iOS play video
  6. 编写高质量代码改善C#程序的157个建议——建议56:使用继承ISerializable接口更灵活地控制序列化过程
  7. Slf4j MDC 使用和 基于 Logback 的实现分析
  8. 使用VS Code开发C++
  9. zookeeper安装和使用 windows
  10. 虚拟机网络配置,桥接模式和NAT模式