UVALive 6948 Jokewithpermutation dfs
题目链接:UVALive 6948 Jokewithpermutation
题意:给一串数字序列,没有空格,拆成从1到N的连续数列。
dfs.
可以计算出N的值,也可以直接检验当前数组是否合法。
#include <stdio.h>
#include <iostream>
#include <string.h>
#define maxn 100
using namespace std; char str[maxn];
int num[maxn];
bool vis[maxn];
int cnt;
int len;
int N; bool ok = false; bool dfs(int id, int pos) {
if (ok) return false;
if (pos == len && id == N) {
cnt = id;
ok = true;
return true;
}
if (pos >= len) return false; num[id] = str[pos] - '0';
if (num[id] >= 1 && num[id] <= N && !vis[num[id]]) {
vis[num[id]] = 1;
if (dfs(id+1, pos+1)) return true;
//dfs(id+1, pos+1);
vis[num[id]] = 0;
}
num[id] = (str[pos]-'0')*10 + str[pos+1]-'0';
if (num[id] >= 1 && num[id] <= N && !vis[num[id]]) {
vis[num[id]] = 1;
if (dfs(id+1, pos+2)) return true;
//dfs(id+1, pos+2);
vis[num[id]] = 0;
}
return false;
} int main() {
//freopen("in.cpp", "r", stdin);
while(~scanf("%s", str)) {
ok = false;
len = strlen(str);
cnt = 0;
N = (len>9?9:len)+(len>9?(len-9)/2:0);
memset(vis, 0, sizeof(vis));
dfs(0, 0);
for (int i=0; i<cnt; ++i) {
if (i == 0) printf("%d", num[i]);
else printf(" %d", num[i]);
}
printf("\n");
}
return 0;
}
dfs要优雅...
UVALive 6948 Jokewithpermutation dfs的更多相关文章
- UVALive 6948 Jokewithpermutation 深搜
题意就是把一段序列拆成从1到n的形式 一开始暴力了一下 后来发现bug太多一定是思路不对…… #include<stdio.h> #include<iostream> #inc ...
- Jokewithpermutation (DFS)
Problem J. Jokewithpermutation Input file: joke.inOutput file: joke.out Joey had saved a permutation ...
- UVALive - 6436(DFS)
题目链接:https://vjudge.net/contest/241341#problem/C 题目大意:给你从1到n总共n个数字,同时给你n-1个连接,同时保证任意两个点之间都可以连接.现在假设任 ...
- UVALive - 6436 —(DFS+思维)
题意:n个点连成的生成树(n个点,n-1条边,点与点之间都连通),如果某个点在两点之间的路径上,那这个点的繁荣度就+1,问你在所有点中,最大繁荣度是多少?就比如上面的图中的C点,在A-B,A-D,A- ...
- Cells UVALive - 3486(dfs序+手动开栈)
给一棵树,每次每次询问一个点是否是另一个点的祖先? 输入时是每个下标对应节点的儿子的数量 用dfs序 时间戳.. 如果一个点是另一个点的祖先,那么它的两个标记一定在祖先的范围之内 #include & ...
- UVALive - 6712 lca+dfs序线段树
题意:一棵树q次查询,每次查询给三个不同的点,要求计算到这三个点的比其他两个距离都要小的点数 题解:很明显的lca,倍增的找中点,关键是两个点的中点很好找,但是三个点不好找,我刚开始还准备分类讨论,后 ...
- UVALive - 6436、HYSBZ - 2435 (dfs)
这两道题都是用简单dfs解的,主要是熟悉回溯过程就能做,据说用bfs也能做 道路修建(HYSBZ - 2435) 在 W 星球上有n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道 ...
- DFS Gym 100553J Jokewithpermutation
题目传送门 /* 题意:将字符串分割成一个全排列 DFS:搜索主要在一位数和两位数的处理,用d1, d2记录个数,在不饱和的情况下,两种都试一下 DFS还是写不来,难道是在家里懒? */ #inclu ...
- UVALive 4998 Simple Encryption --DFS
题意: 给出K1,求一个12位数(不含前导0)K2,使得K1^K2 mod (10^12) = K2. 解法: 求不动点问题. 有一个性质: 如果12位数K2满足如上式子的话,那么K2%1,K2%10 ...
随机推荐
- 一个封装较好的删除方法(Delete)
前台的引用 @Html.ActionLink(“删除字样”,“后台的删除方法”,new{绑定id},new{@style="样式"});方法,如何要独立使用的话,一般还要使用到相应 ...
- iOS - UIDatePicker
前言 NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIDatePicker : UIControl <NSCoding> ...
- Python学习(19)正则表达式
目录 Python 正则表达式 re.match 函数 re.search 方法 re.match 函数与 re.search 方法区别 检索和替换 正则表达式修饰符 - 可选标志 正则表达式模式 正 ...
- spring配置详解
1.前言 公司老项目的后台,均是基于spring框架搭建,其中还用到了log4j.jar等开源架包.在新项目中,则是spring和hibernate框架均有使用,利用了hibernate框架,来实现持 ...
- final简介
final简介 final用来修饰方法和属性表示特殊的意义.修饰方法时表示方法不能被重写:修饰属性时表示属性不能被改变,这里属性又分为对象和基本类型,修饰基本类型表示基本类型赋值以后不能再被赋值,修饰 ...
- commonJS — 全局操作(for Window)
for Window github: https://github.com/laixiangran/commonJS/blob/master/src/forWindow.js 代码 /** * Cre ...
- 犯过错误的C语言问题
1 memcpy函数: 函数原型:void *memcpy(void *dest, void *src, unsigned int count); 函数源码: void *memcpy1(void * ...
- canvas实现音乐中的歌词播放效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 扒一扒JavaScript 预解释
带var关键字预解释 让我们先看下这段代码执行的结果: 代码如下: alert(n);//弹出undefinedvar n = 10; 弹出的结果是undefined,为何不是10?让我们再看下面这段 ...
- kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法)
kmeans一般在数据分析前期使用,选取适当的k,将数据聚类后,然后研究不同聚类下数据的特点. 算法原理: (1) 随机选取k个中心点: (2) 在第j次迭代中,对于每个样本点,选取最近的中心点,归为 ...