hdu4665 DFS
题意:
给你一个字符串,问你能不能拆成两个相同的字符串,顺序不能改变.
思路:
咋一看数据有点大,搜索过不去,但想想优化的地方很多,而且每个字母最多出现四次,所以多几个剪纸应该会过.
#include<stdio.h>
#include<string.h> #define N 2000 + 10
int ans1[N] ,ans2[N];
int s1[N] ,s2[N] ,s[N];
int num[N] ,now[N] ,n;
int ok; bool okk1(int l1 ,int l2 ,int id)
{
if(s1[num[id]] >= s[num[id]] / 2)
return 0;
if(l1 >= l2) return 1;
else if(num[id] == ans2[l1]) return 1;
else return 0;
}
bool okk2(int l1 ,int l2 ,int id)
{
if(l2 >= l1) return 1;
else if(num[id] == ans1[l2]) return 1;
else return 0;
} void DFS(int l1 ,int l2 ,int id)
{
if(ok) return ;
if(l1 > n / 2 + 1 || l2 > n / 2 + 1)
return;
if(l1 == n / 2 + 1 && l2 == n / 2 + 1)
{
ok = 1;
return ;
}
if(okk1(l1 ,l2 ,id) && !ok)
{
now[id] = 0;
ans1[l1] = num[id];
s1[now[id]] ++;
DFS(l1 + 1 ,l2 ,id + 1);
s1[now[id]] --;
}
if(okk2(l1 ,l2 ,id) && !ok)
{
now[id] = 1;
ans2[l2] = num[id];
s2[num[id]] ++;
DFS(l1 ,l2 + 1 ,id + 1);
s2[num[id]] --;
}
} int main ()
{
int t ,i;
scanf("%d" ,&t);
while(t--)
{
scanf("%d" ,&n);
memset(s ,0 ,sizeof(s));
for(i = 1 ;i <= n ;i ++)
{
scanf("%d" ,&num[i]);
s[num[i]] ++;
s1[i] = s2[i] = 0;
}
ok = 0;
DFS(1 ,1 ,1);
for(i = 1 ;i < n ;i ++)
printf("%d" ,now[i]);
printf("%d\n" ,now[i]);
}
return 0;
}
hdu4665 DFS的更多相关文章
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)
来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536 ...
- 深度优先搜索(DFS)
[算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
1146: [CTSC2008]网络管理Network Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 3495 Solved: 1032[Submi ...
随机推荐
- Vulnhub dc-4靶机通关
Vulnhub dc-4靶机通关 下载地址:https://download.vulnhub.com/dc/DC-4.zip 安装好dc-4靶机 使用局域网查看器扫描到ip地址 端口扫描,发现运行了8 ...
- 【转载】关于grad_tensors的解惑
转载:https://www.cnblogs.com/marsggbo/p/11549631.html 平常都是无脑使用backward,每次看到别人的代码里使用诸如autograd.grad这种方法 ...
- 在Linux中安装MariaDB并添加远程访问
在Linux中安装MariaDB并添加远程访问 最近学习到了数据库部分,因为有一台台式机一台笔记本换着用,就没有把数据库安装在本机,本来打算用之前买的虚拟空间的数据库的,结果速度太慢用起来太难受了,就 ...
- Nmap命令使用方法
Nmap使用合集 感谢博主:VVVinson 文章链接:https://www.cnblogs.com/Vinson404/p/7784829.html 参 数 说 明 ...
- cve-2018-2893 weblogic -WLS核心组件反序列化
漏洞分析 https://www.freebuf.com/column/178103.html https://www.freebuf.com/vuls/177868.html 攻击者可以在未授权的情 ...
- freebsd root 登录 KDE SDDM
sddm.conf 文件现在默认不会自动生成了.需要自己创建:ee /usr/local/etc/sddm.conf写入MinimumUid=0MaximumUid=00就是root用户.然后更改/u ...
- C# 基础 - 日志捕获一使用 StreamWriter
public static class LogHelper { private static readonly string _baseDir = AppDomain.CurrentDomain.Ba ...
- Java数组:多维数组(二维),Arrays类,冒泡排序
Arrays类数组工具类:java.util.ArraysArrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而"不用"使用对象来调用 具有 ...
- 如何在 C# 中使用 ArrayPool 和 MemoryPool
对资源的可复用是提升应用程序性能的一个非常重要的手段,比如本篇要分享的 ArrayPool 和 MemoryPool,它们就有效的减少了内存使用和对GC的压力,从而提升应用程序性能. 什么是 Arra ...
- MyBatis简单的CRUD操作
Dao接口 package com.ttpfx.dao; import com.ttpfx.domain.User; import java.util.List; public interface U ...