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 ...
随机推荐
- myeclipse10.05安装aptana
安装步骤: 1.下载aptana3.2 Eclipse Plugin插件. 下载地址:http://update1.aptana.org/studio/3.2/024747/index.html 2. ...
- poj2546Circular Area(两圆相交面积)
链接 画图推公式 这两种情况 都可用一种公式算出来 就是两圆都求出圆心角 求出扇形的面积减掉三角形面积 #include <iostream> using namespace std; # ...
- jquery ajax 实例
$(function(){ $.ajax( { url:'{:U('shenhe')}',// 跳转到 action data:{ }, type:'post', cache:false, dataT ...
- 共享内存 最快IPC 的原因
参考 http://www.360doc.com/content/13/0817/11/7377734_307777806.shtml 我的理解,这里指的是用户进程的用户态空间和内核空间,也就是那个3 ...
- android设备休眠机制
如果一开始就对Android手机的硬件架构有一定的了解,设计出的应用程序通常不会成为待机电池杀手,而要设计出正确的通信机制与通信协议也并不困难.但如果不去了解而盲目设计,可就没准了. 首先Androi ...
- Android自动检测版本及自动升级
步骤: 1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName. 2.从服务器获取版本号(版本号存在于xml文件中) ...
- MyBatis学习笔记(二) 关联关系
首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001 没事看看 - MyBatis工具:www.mybatis.tk h ...
- Java中for循环遍历List的两种方法
我们平常使用的方法: List<WebElement> element = driver.findElements(By.tagName("input")); ...
- HBase 的存储结构
HBase 的存储结构 2016-10-17 杜亦舒 HBase 中的表常常是超级大表,这么大的表,在 HBase 中是如何存储的呢?HBase 会对表按行进行切分,划分为多个区域块儿,每个块儿名为 ...
- 转!!Java学习之自动装箱和自动拆箱源码分析
自动装箱(boxing)和自动拆箱(unboxing) 首先了解下Java的四类八种基本数据类型 基本类型 占用空间(Byte) 表示范围 包装器类型 boolean 1/8 true|fal ...