UVA195 Anagram 题解
To 题目
主要思路:全排列 + 亿点点小技巧。
不会全排列的可以先把这道题过了 \(P1706\)。
这道题的难点就在于有重复的单词,只记一次。
第一个想法是将所有以生成的单词记录下来,然后每次判断是否为已存在,但是很明显,你不是 \(TLE\) 就是 \(MLE\) 有哪位勇士去试一下吗。
所以,要换一种做法,记录原单词每个字母出现的次数。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n;//共输入n组数据
char s[9999999];//单词
int len;//长度
int used[9999999];//每个字母出现次数
char a[9999999];//原单词
void dfs(int x){
if(x>len){//如果长度已足
for(int i=1;i<=len;i++){
printf("%c",s[i]);//输出
}
printf("\n");//换行
return;//结束函数
}
for(int i='A';i<='Z';i++){//枚举字母,不用小写是因为在ASCII码中小写大于大写
if(used[i]){//如果大写字母可以用
used[i]--;//减少一次使用次数
s[x]=i;//此位为i
dfs(x+1);//确定下一位
used[i]++;//回溯释放状态
}
if(used[i-'A'+'a']){//如果小写字母可以用
used[i-'A'+'a']--;//减少一次使用次数
s[x]=i-'A'+'a';//此位为i的小写
dfs(x+1);//确定下一位
used[i-'A'+'a']++;//回溯释放状态
}
}
}
int main(){
scanf("%d",&n);//输入n
while(n--){
memset(used,0,sizeof(used));//记得初始化
cin>>a;//输入这个单词
len=strlen(a);//单词长度
for(int i=0;i<=len;i++){
used[a[i]]++;//记录每个字母的可使用次数
}
dfs(1);//开始全排列
}
return 0;//完结撒花
}
UVA195 Anagram 题解的更多相关文章
- 算法与数据结构基础 - 哈希表(Hash Table)
Hash Table基础 哈希表(Hash Table)是常用的数据结构,其运用哈希函数(hash function)实现映射,内部使用开放定址.拉链法等方式解决哈希冲突,使得读写时间复杂度平均为O( ...
- 【LeetCode题解】排序
1. 排序 排序(sort)是一种常见的算法,把数据根据特定的顺序进行排列.经典的排序算法如下: 冒泡排序(bubble sort) 插入排序(insertion sort) 选择排序(selecti ...
- C#版 - Leetcode49 - 字母异位词分组 - 题解
C#版 - Leetcode49 - 字母异位词分组 - 题解 Leetcode49.Group Anagrams 在线提交: https://leetcode.com/problems/group- ...
- C#版[击败99.69%的提交] - Leetcode 242. 有效的同构异形词 - 题解
C#版 - Leetcode 242. 有效的同构异形词 - 题解 Leetcode 242.Valid Anagram 在线提交: https://leetcode.com/problems/val ...
- POJ 2408 - Anagram Groups - [字典树]
题目链接:http://poj.org/problem?id=2408 World-renowned Prof. A. N. Agram's current research deals with l ...
- LeetCode All in One题解汇总(持续更新中...)
突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...
- LeetCode 760. Find Anagram Mappings
原题链接在这里:https://leetcode.com/problems/find-anagram-mappings/description/ 题目: Given two lists Aand B, ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
随机推荐
- Keepalived入门学习
一个执着于技术的公众号 Keepalived简介 Keepalived 是使用C语言编写的路由热备软件,该项目软件起初是专门为LVS负载均衡设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后 ...
- muduo源码分析之回调模块
这次我们主要来说说muduo库中大量使用的回调机制.muduo主要使用的是利用Callback的方式来实现回调,首先我们在自己的EchoServer构造函数中有这样几行代码 EchoServer(Ev ...
- VMware虚拟机中安装Linux操作系统(ubuntu)
一.准备工作: 1.下载VMware虚拟机 下载地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evalua ...
- Typora 开始收费,改用好玩的MarkText
收费-- 可以考虑使用:MarkText 简述MarkText MarkText 这个工具侧重于"命令",导航栏都被收起来了.有些小伙伴感觉反而不好用,其实不然,是未了解该工具的强 ...
- Maven生成可以直接执行的jar包
要想jar包能直接通过java -jar xxx.jar运行,需要满足: 1.在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的入口在哪里: 2.要能 ...
- 零基础学Java第六节(面向对象二)
本篇文章是<零基础学Java>专栏的第六篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] 继承 创建一个Person类 我们 ...
- Spark框架——WordCount案例实现
package wordcount import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} ...
- 手动搭建简易web框架与django框架简介
目录 纯手写简易web框架 基于wsgiref模块 动静态网页 简单了解jinja2模块 框架请求流程 python主流web框架 django框架 简介 应用app 命令操作django pycha ...
- Activate-or-Not:learning-customized-activation
关于activate-or-Not的PPT paper code step1 step2 step3 step4 step5 step6 step7 step8 step9 step10
- Java开发学习(二)----IOC、DI入门案例
一.IOC入门案例 1.1 思路分析 (1)Spring是使用容器来管理bean对象的,那么管什么? 主要管理项目中所使用到的类对象,比如(Service和Dao) (2)如何将被管理的对象告知IOC ...