poj 1256 Anagram(dfs)
题目链接:http://poj.org/problem?id=1256
思路分析:该题为含有重复元素的全排列问题;由于题目中字符长度较小,采用暴力法解决。
代码如下:
#include <iostream>
#include <algorithm>
using namespace std; const int MAX_N = ;
char P[MAX_N], A[MAX_N]; char * SortAlp(char P[], int n)
{
int Low[MAX_N], Upper[MAX_N];
int LowLen, UpperLen; LowLen = UpperLen = ;
for (int i = ; i < n; ++ i)
{
if ('A' <= P[i] && P[i] <= 'Z')
Upper[UpperLen++] = P[i];
else
Low[LowLen++] = P[i];
}
sort(Low, Low + LowLen);
sort(Upper, Upper + UpperLen); int Index_L, Index_U;
Index_L = Index_U = ;
for (int j = ; j < n; ++j)
{
if (Upper[Index_U] - 'A' + 'a' <= Low[Index_L]
&& Index_U < UpperLen)
P[j] = Upper[Index_U++];
else
P[j] = Low[Index_L++];
}
return P;
} void PrintPermutation(int n, char P[], char A[], int cur)
{
int i, j; if (cur == n)
{
for (i = ; i < n; ++i)
printf("%c", A[i]);
printf("\n");
}
else
{
for (i = ; i < n; ++i)
{
if (!i || P[i] != P[i-])
{
int c1 = , c2 = ; for (j = ; j < cur; ++j)
if (A[j] == P[i]) c1++;
for (j = ; j < n; ++j)
if (P[i] == P[j]) c2++; if (c1 < c2)
{
A[cur] = P[i];
PrintPermutation(n, P, A, cur + );
}
}
}
}
} int main()
{
int n;
char P[MAX_N]; cin >> n;
for (int i = ; i < n; ++i)
{
cin >> P;
SortAlp(P, strlen(P));
PrintPermutation(strlen(P), P, A, );
}
return ;
}
poj 1256 Anagram(dfs)的更多相关文章
- POJ 1256.Anagram
2015-06-04 问题简述: 输出一串字符的全排列,顺序不同于一般的字母序,而是 A<a<B<b......<Z<z.所以应该重写一个比较函数. 原题链接:http: ...
- poj 1256 Anagram—next_permutation的神奇应用
题意:给你一条字符串,让你输出字符串中字符的全排列,输出的顺序要按它给的奇葩的字典序. 题解:要输出全排列,暴力dfs可以过,但要注意题目的字典序以及相同字符的情况.如果用next_permutati ...
- poj 2408 Anagram Groups(hash)
id=2408" target="_blank" style="">题目链接:poj 2408 Anagram Groups 题目大意:给定若干 ...
- POJ.3172 Scales (DFS)
POJ.3172 Scales (DFS) 题意分析 一开始没看数据范围,上来直接01背包写的.RE后看数据范围吓死了.然后写了个2^1000的DFS,妥妥的T. 后来想到了预处理前缀和的方法.细节以 ...
- POJ 1256:Anagram
Anagram Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18393 Accepted: 7484 Description ...
- ACM : POJ 2676 SudoKu DFS - 数独
SudoKu Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu POJ 2676 Descr ...
- poj 1816 (Trie + dfs)
题目链接:http://poj.org/problem?id=1816 思路:建好一颗Trie树,由于给定的模式串可能会重复,在原来定义的结构体中需要增加一个vector用来记录那些以该节点为结尾的字 ...
- POJ 1564 经典dfs
1.POJ 1564 Sum It Up 2.总结: 题意:在n个数里输出所有相加为t的情况. #include<iostream> #include<cstring> #in ...
- POJ 1321 简单dfs
1.POJ 1321 棋盘问题 2.总结: 题意:给定棋盘上放k个棋子,要求同行同列都不重. #include<iostream> #include<cstring> #in ...
随机推荐
- Log4Net 使用总结
在项目中要记录日志,便于程序调试.于是就想到了大名鼎鼎的Log4Net,这货可以方便地将日志信息记录到文件.控制台.Windows事件日志和数据库(包括MS SQL Server, Access, O ...
- Windows Server 2012 R2 服务器管理器介绍和配置使用
1. 服务管理器是用于管理系统服务的管理工具.一般常用于windows系统,使用这个工具你可以启动.停止服务:设置服务是自动.手动启动或禁用:查看某个服务的相关信息:设置服务以什么用户启动等等(一般包 ...
- HOOK API(四)—— 进程防终止
HOOK API(四) —— 进程防终止 0x00 前言 这算是一个实战吧,做的一个应用需要实现进程的防终止保护,查了相关资料后决定用HOOK API的方式实现.起初学习HOOK API ...
- [Swust OJ 360]--加分二叉树(区间dp)
题目链接:http://acm.swust.edu.cn/problem/360/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- iptables 简单配置
通过命令 netstat -tnl 可以查看当前服务器打开了哪些端口 Ssh代码 netstat -tnl 查看防火墙设置 Ssh代码 iptables -L -n 开放 ...
- hihocoder #1260 : String Problem I
题目链接 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 我们有一个字符串集合S,其中有N个两两不同的字符串. 还有M个询问,每个询问给出一个字符串w,求有多少S中的 ...
- 为什么Lisp没有流行起来
很久以前,这种语言站在计算机科学研究的前沿,特别是人工智能的研究方面.现在,它很少被用到,这一切并不是因为古老,类似古老的语言却被广泛应用.其他类似的古老的语言有??FORTRAN. COBOL. L ...
- oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。
需要获得一个视图中的字段名称.字段类型.字段长度等信息,该如何编写sql语句.通过select * from user_views可以获得给定用户下所有的视图名称了,但是没找到如何获取视图结构的解决方 ...
- 干Inlay的生产过程
•天线的组成 天线的材料有0.38PET和0.16以及0.3的铝箔组成. 倒封装 •将IC倒装在天线焊盘位置. •方法:先点胶水, 然后把IC对准焊盘(IC一面有凸点),通过热压把IC 固定在焊盘上. ...
- 参照openRTSP写的一个RTSP client 加了一些注解
#include "liveMedia.hh" #include "BasicUsageEnvironment.hh" #include "Gro ...