题目链接

题意
给出两个正整数a,b。在十进制下重排a,构造一个不超过b的最大数,不能有前导零。允许不去重排a。
输入格式:
第一行一个数a(1<=a<=1018),第二行一个数b(1<=b<=1018)
数没有前导零,数据保证有解。
输出格式:
输出一个数,表示a重排后不超过b的最大数,不应该有前导零。
输出的数的长度应该与a相等,它应该是a的一个排列。
思路:
以字符串的形式输入,先将a字符串从小到大排序,然后dfs搜索来找到不超过b的最大数,需要经过剪枝优化来降低复杂度
代码:

#include<iostream>
#include<algorithm>
#include<queue>
#include<set>
#include<unordered_map>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<string>
#include<map>
#include<cmath>
#include<bitset>
#define ll long long
#define SE_IT set<node>::iterator
#define inf 0x3f3f3f3f
#define bug(a) cout<<"* "<<a<<endl;
#define bugg(a,b) cout<<"* "<<a<<" "<<b<<endl;
#define buggg(a,b,c) cout<<"* "<<a<<" "<<b<<" "<<c<<endl;
using namespace std;
typedef pair<int,int> pii;
const int N=1e5+10;
const double esp=1e-5;
const ll mod=1e9+7;string s1,s2,ans;
bool vis[N];
bool flag;
void dfs(string x,int y,bool flag){//bug(x)if(x.size()==s1.size()){ans=x;return ;}for(int i=0;i<s1.size();i++){if(!vis[i]){if(!flag&&s1[i]>s2[y]) continue;if(!flag&&s1[i]==s2[y]){string st="",st2;st2=s2.substr(y,s2.size()-y);for(int i=0;i<s1.size();i++)if(!vis[i])st+=s1[i];sort(st.begin(),st.end());if(st>st2) return ;if(st==st2){ans=x+st;return ;}}if(s1[i]<s2[y])flag=1;vis[i]=1;dfs(x+s1[i],y+1,flag);vis[i]=0;if(ans.size()>0)return ;}}
}int main()
{cin>>s1>>s2;sort(s1.begin(),s1.end(),greater<char>());if(s1.size()<s2.size()){ans=s1;}elsedfs("",0,0);cout<<ans<<endl;return 0;
}
/*
2000000000001
2000000000000
*/

CF915C Permute Digits(搜索+剪枝)相关推荐

  1. poj 1948(搜索+剪枝)

    解题思路:这道题看到数据量,想到应该搜索+剪枝应该可以过..可是别人的A了,我的却超时了... 我用了一个mark[a][b],表示前两条边长度分别为a和b时,是否已经处理过,如果是的话就直接跳出.. ...

  2. LeetCode 47. 全排列 II(回溯+搜索剪枝)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 给定一个可包含重复数字的序列,返回所有不重复的全排列. 示例:输入: [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1] ] ...

  3. 极大极小搜索 α-β剪枝的实现

    极大极小搜索 α-β剪枝的实现 //---------搜索当前搜索状态极大值--------------------------------// //alpha 祖先节点得到的当前最小最大值,用于al ...

  4. 深搜、广搜、搜索剪枝

    搜索与回溯讲解 文章目录 深搜 方向向量: DFS代码: 题目讲解: 八皇后问题 字符序列 自然数的拆分 广搜 BFS代码: 题目讲解: 瓷砖 关系网络 bfs与dfs的用途与区别 搜索剪枝 可行性剪 ...

  5. USACO 6.5.3 Betsy's Tour 搜索剪枝

    http://train.usaco.org/usacoprob2?a=BI4LEPNXcEa&S=betsy 题目大意:一个N*N的方阵(N<=7),求从左上角出发到左下角结束经过每个 ...

  6. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 【bfs + 记忆化搜索 + 剪枝】 AC 代码

    ACM 北京区域赛 bfs+剪枝+ms 第一个一遍过的题目,基本没有看题解 记忆搜索当中,注意初始化成一个特殊值:而在访问之后,每个点就会有一个不同于INF(或者 -1等特殊标记)的值 先到先得,适者 ...

  7. Croc Champ 2013 - Round 2 (Div. 2 Edition) 贪心+ 搜索+剪枝 + 数学

    A: 直接找出最小值,看是否能被所有数整除即可 B: 判断是否出现连续的"#">=m若果存在肯定不能调. C: 题意: 两个人玩游戏(A,B),每个人分配一个字符串长度为2* ...

  8. HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题

    这个问题是一个典型的类型的问题迷宫广泛的搜索. 在网上看到了很多解决方案. 没什么解决问题的分析报告,不指出其中的关键点.代码更像是一大抄.一些分析师也有很大的文章分析.只是不要全部命中关键,什么是广 ...

  9. 深度搜索剪枝——数的划分

    [题目描述]将整数n分成k份,且每份不能为空,问有多少种分法? [输入格式]两个整数n,m(6<n<=200,2<=m<=6) [输出格式]输出不同的分法数 [样例输入]7 3 ...

最新文章

  1. BeautifulSoup安装及其应用
  2. Selenium常用方法及函数
  3. SAP实施要重视用户体验
  4. __declspec(novtable) 的用法
  5. 李宏毅机器学习课程7~~~反向传播
  6. 配置SQL Server 2012 AlwaysOn ——step1 建立AD域及DNS配置
  7. matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)
  8. python 网页调试_使用Django 2.0构建Python Restful Web服务:七)在浏览器中浏览和调试restful接口...
  9. Navicat for Mysql 的使用
  10. 3dsmax如何批量导入obj格式文件
  11. Java实现图片验证码功能
  12. 国美金融贷款绝对定位与相对定位的关系(国美金融贷款位置)
  13. MySQL性能瓶颈以及优化
  14. PCIE实现PIO模式寄存器读写调试记录
  15. CSS 实现平行四边形、菱形、切角效果、梯形
  16. 加密流量分析-2.研究背景
  17. 94、基于51单片机的无线调频对讲机系统设计
  18. 揭密Oracle之七种武器之三:破译古老的谜题---共享CBC Latch的秘密
  19. win7修改网络计算机名字,Win7系统中不能修改计算机名字是怎么回事?
  20. numpy.reshape()函数

热门文章

  1. 公有云和私有云的对比和转换
  2. 【程序小白养成计划】编程入门指北--编程小白常见问题QA
  3. Abaqus基于JH2本构的脆性材料冲击仿真及SHPB模拟
  4. SVN authz 配置详解 转载
  5. 走进“开源SDR实验室” 一起玩转GNU Radio:gr-qtgui
  6. maxwell 概念
  7. 修改图片大小尺寸如何操作?修改图片大小尺寸的作用
  8. 【零基础】极星量化小技巧:启动时自动轮换合约
  9. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-人机界面如何设置页面跳转
  10. 原生_H5交互插件(适用于与V2.1)