Codeforces 915 C. Permute Digits (dfs)
题目链接:Permute Digits
题意:
给出了两个数字a,b(<=1e18),保证a,b都不带前缀0。用a的字符重组一个数字使这个值最大且小于b。(保证这个值存在)
题解:
这题遇到了不止一遍了,但是每次都会写错~所以感觉很有必要写下来。看到这题,我的第一想法是贪心每次都取最大的。但是这样其实存在很大的漏洞,因为字符个数是有限的如果小的数被取完了大的数填充进去也不符合条件。这题要按DFS的思路去做才行。这里给出按贪心的做法的一组错误数据。
a: 123456789123456789
b: 276193619183618162
my_output: 276193618987554432
answer: 276193618987554432
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 1e3+;
char vec[MAX_N];
char s[MAX_N];
int res[MAX_N];
char out[MAX_N];
int point;
void dfs(int pos,int flag,int len)
{
if(pos == len)
{
out[len] = '\0';
printf("%s\n",out);
exit();
}
//cout<<"...."<<endl;
int t = pos+point;
if(flag)
{
bool f = true;
for(int j=; j>=; j--)
{
if(res[j])
{
out[pos] = j+'';
res[j]--;
dfs(pos+,flag,len);
res[j]++;
}
}
if(f) return;
}
else
{
bool f = true;
for(int j=s[t]-''; j>=; j--)
{
if(res[j])
{
//cout<<"......"<<j<<"..."<<s[t]<<endl;
out[pos] = j+'';
res[j]--;
if(j==s[t]-'') dfs(pos+,,len);
else dfs(pos+,,len);
res[j]++;
}
}
if(f) return;
} }
int main()
{
int N,M,T;
memset(res,,sizeof(res));
scanf("%s",vec);
scanf("%s",s);
int len = strlen(vec);
for(int i=; i<len; i++) res[vec[i]-'']++;
int l = strlen(s);
point = l - len;
if(point > ) dfs(,,len);
else dfs(,,len);
return ;
}
Codeforces 915 C. Permute Digits (dfs)的更多相关文章
- CodeForces 489C Given Length and Sum of Digits... (dfs)
C. Given Length and Sum of Digits... time limit per test 1 second memory limit per test 256 megabyte ...
- codeforces 580C Kefa and Park(DFS)
题目链接:http://codeforces.com/contest/580/problem/C #include<cstdio> #include<vector> #incl ...
- LeetCode Subsets II (DFS)
题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...
- LeetCode Subsets (DFS)
题意: 给一个集合,有n个互不相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: DFS方法:由于集合中的元素是不可能出现相同的,所以不用解决相同的元素而导致重复统计. class Sol ...
- HDU 2553 N皇后问题(dfs)
N皇后问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 在 ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的深度优先搜索遍历(DFS)
关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
随机推荐
- Mysql5.7 的错误日志中最常见的note级别日志解释
在使用mysql5.7的时候,发现了不少在mysql5.6上不曾见过的日志,级别为note, 最常见的note日志以下三种,下面我们来逐个解释. 第一种,Aborted connectio ...
- 用UIScrollView产生视差效果
用UIScrollView产生视差效果 效果: 高级效果: 源码: MoreInfoView.h + MoreInfoView.m // // MoreInfoView.h // YXCell / ...
- [翻译] ZCSHoldProgress
ZCSHoldProgress 以下是使用效果: https://github.com/zshannon/ZCSHoldProgress "Your users be pressin' lo ...
- 一个好玩的计算题目(c++ 位运算)
2015/11/10 在一个qq群里面,看到一个好玩的题目.“int foo(int x){return x&-x} foo(2^31-3)这个怎么算 ?” 1.自己也就开始算了: (1) ...
- ORACLE数据库入门再在屋里坐会
一.数据库简介 数据库概述 数据库(database)是按照数据结构来组织,存储和管理数据的仓库,它产生与距今五十年前. 简单来说是本身可视为电子化的文件柜--存储电子文件的处所,用户可以对文件中的数 ...
- 什么是AOP-面向交叉业务编程
一.AOP(Aspect-oriented programming,面向切面编程): 什么是AOP? 定义:将程序中的交叉业务逻辑提取出来,称之为切面.将这些切面动态织入到目标对象,然后生成一个代理对 ...
- kubenetes master使用curl 操作API
前提条件: 已经使用kubeadm 安装集群 查看 kebelet.conf 配置内容 kubectl --kubeconfig /etc/kubernetes/kubelet.conf config ...
- virtualbox+vagrant学习-2(command cli)-7-vagrant login命令
Login ⚠️该命令已经弃用了,别名为vagrant cloud auth login.看本博客的 格式: vagrant cloud auth login [options] 登录命令用于使用Ha ...
- Angular动态表单生成(四)
ng-dynamic-forms实践篇(下) 我们接着上篇,先把小目标中的所有字段都定义出来 这部分就是苦力活儿了,把KendoUiComponent中的formModel完善即可: formMode ...
- Java静态方法块、非静态方法块、构造方法、静态方法执行顺序
示范类StaticTest.java public class StaticTest { {//只有当创建对象的时候执行 System.out.println("H1 ...