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 =10; const LL INF= (1LL)<<60; int k,len; int pos[maxn]; int num[maxn]; bool vis[maxn];int check(){memset(vis,0,sizeof(vis));int cnt =0;for(int i=0;i<len;++i){if(vis[i]) continue;int tmp=0;while(!vis[i]){tmp++;vis[i]=1;i = pos[i];}cnt += tmp-1;if(cnt>k) return 0;}return cnt; }char str[maxn]; int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifint T;scanf("%d",&T);while(T--){memset(str,0,sizeof(str));scanf("%s %d",str,&k);len = strlen(str);LL N=0;for(int i=0;i<len;++i) num[i] = str[i]-'0',pos[i]=i,N = N*10+num[i];LL ans1= N,ans2=N;do{if(num[pos[0]]!=0 && check()){LL tmp =0;for(int i=0;i<len;++i){tmp*=10;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 0; }
转载于:https://www.cnblogs.com/xiuwenli/p/9432817.html
HDU 6351 (Beautiful Now) 2018 Multi-University Training Contest 5相关推荐
- HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5
思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...
- HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3
/* HDU 6058 - Kanade's sum [ 思维,链表 ] | 2017 Multi-University Training Contest 3 题意:给出排列 a[N],求所有区间的第 ...
- hdu 6351 Beautiful Now
http://acm.hdu.edu.cn/showproblem.php?pid=6351 题意:任意交换两个数至多k次求得到的最大的数和最小的数 #include<bits/stdc++.h ...
- HDU 4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)
题意:给定n*m个格子,每个格子能填0-k 的整数.然后给出每列之和和每行之和,问有没有解,有的话是不是唯一解,是唯一解输出方案. 思路:网络流,一共 n+m+2个点 源点 到行连流量为 所给的 ...
- 9行代码AC——HDU 6857 -Clockwise or Counterclockwise(2020 Multi-University Training Contest 8)(判断三点顺序)
励志用尽量少的代码做高效表达 Problem Description It is preferrable to read the pdf statment. After some basic geom ...
- 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...
- 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...
- Sichuan University Programming Contest 2018 Preliminary
嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...
- HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2
/* HDU 6051 - If the starlight never fade [ 原根,欧拉函数 ] | 2017 Multi-University Training Contest 2 题意: ...
- hdu 4925 Apple Tree--2014 Multi-University Training Contest 6
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925 Apple Tree Time Limit: 2000/1000 MS (Java/Others ...
最新文章
- 报名丨图神经网络前沿学术研讨会:清北高校vs企业,9位学者联袂分享
- python3 赋值 浅拷贝 深拷贝 简介
- Android远程桌面助手(B1391)
- 获取项目版本号与设置引导页的判断条件
- socket网络间通信初识
- My team and my group in my opportunity and my appointment
- WordPress Restful API registration to Kyma WordPress API注册到Kyma的实现原理
- kafka grpc_模型服务:流处理与使用Java,gRPC,Apache Kafka,TensorFlow的RPC / REST
- pta最长连续递增子序列C语言,pta 习题集 5-5 最长连续递增子序列 (dp)
- Android系统 (150)---Android 开发者工具
- Powershell tricks::Powershell Remoting
- java 线程访问控件_多线程下访问控件的方式
- 数据库设计时设计标识字段的一些思考
- 超详细Hexo+Github博客搭建小白教程
- 中值滤波器的matlab实现
- 运动控制芯片 Motion Control ICs
- 2011-11-27神马浮云的一天
- 【win10蓝屏】记录一下,随机蓝屏,开机蓝屏,使用中蓝屏的经历
- Unity 中英文转换
- Python-练习 42. Is-A, Has-A, 对象和类
热门文章
- 中国HBase技术社区第十届meetup--HBase生态实践 (杭州站)...
- iOS换肤功能的简单处理框架
- opencv python 读取图像/显示图像/保存图像
- 【翻译】GRAIL-手写识别
- CentOS 7 配置Java环境变量
- [傅里叶变换及其应用学习笔记] 二十二. 快速傅里叶变换
- PHP的XML Parser(转)
- 防火墙配置文件iptables详解
- Unix环境高级编程第三版源代码编译与使用说明
- double除以int结果是int吗_游戏开发java中int可以用汉字吗?