题意:

      给你一个字符串,问你能不能拆成两个相同的字符串,顺序不能改变.

思路:

      咋一看数据有点大,搜索过不去,但想想优化的地方很多,而且每个字母最多出现四次,所以多几个剪纸应该会过.

#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的更多相关文章

  1. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  2. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  3. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  4. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  5. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  6. POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)

    来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS   Memory Limit: 65536 ...

  7. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

随机推荐

  1. C#正则实现匹配一块代码段

    最近项目,生成聚合网关,但是生成的网关文件中,存在着不必要的代码段,比如一个类A,类B等 之前一直使用手动删除,这么做劳民伤财,浪费时间,考虑使用正则写一个工具实现自动删除. 正则写法: string ...

  2. 【产品设计】linux产品设计总结笔记

    Linux 预研产品设计   产品的目的: 1.综合集团内部重复性开发的工作,将多种操作系统统一到科东统一负责 2.明确技术在哪些设备上是可行的,再去拓展.一开始不做平台化产品 3.软件规划需要结合硬 ...

  3. Windows下常用测试命令

      (1)ping 127.0.0.1 (测试本地网卡,127.0.0.1是本地循环地址,如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作) (2)ping 127.0.0.1  - ...

  4. 关于,java-webservice接口,根据服务端,自动生成客户端调用时,响应时间慢

    我这边遇到的问题,是在和对方进行webservice接口交互的时候,用工具,调用对方的webservice接口,对方响应很快.但是用java生成的客户端调用就会很慢才得到响应.大概有5分钟左右. 这里 ...

  5. 从一个想法看 FreeBSD 是商业化还是学院派

    在某知名计算机网络论坛上我看到一个帖子,说自己想根据 FreeBSD 做一个移动的终端操作系统,就像安卓,苹果的 IOS 一样的. 逆向思维当初开发安卓的时候不可能没有考虑过 FreeBSD,因为无论 ...

  6. Reactive Spring实战 -- 响应式Redis交互

    本文分享Spring中如何实现Redis响应式交互模式. 本文将模拟一个用户服务,并使用Redis作为数据存储服务器. 本文涉及两个java bean,用户与权益 public class User ...

  7. 1.认识numpy的数组

    认识ndarray --ndarray:用于存储单一数据类型的多维数组 ndarray基础属性的认识 import numpy as np #将numpy简写为np方便调用 1.通过以下实例来认识ar ...

  8. 叫练手把手教你读JVM之GC信息

    案例 众所周知,GC主要回收的是堆内存,堆内存中包含年轻代和老年代,年轻代分为Eden和Surivor,如下图所示.我们用案例分析下堆的GC信息[版本:HotSpot JDK1.8]. /** * @ ...

  9. python-顺序串基本操作的实现

    1 #*********************************************************************** ** 2 #> File Name: seq ...

  10. P1739_表达式括号匹配(JAVA语言)

    思路:刚开始想用stack,遇到'('就push,遇到')'就pop,后来发现其实我们只需要用到栈里'('的个数,所以我们用一个变量统计'('的个数就好啦~ 题目描述 假设一个表达式有英文字母(小写) ...