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 ...
随机推荐
- 前端面试 -Vue2系列
vue 1为啥用Vue? 1MVVM 数据的双向绑定 2指令系统 不需要操作DOM 3组件化 2v-show和v-if.v-for v-show 通过 display:none 隐藏元素,DOM还在. ...
- Android开发的开始
Android 软件 手机软件哦,目前只有一层外壳,进一步功能等待开发. 下载地址
- Oracle 19c单实例部署
目录 Oracle 19c单实例部署: 1.配置yum: 2.安装rpm包: 3.设置hostname: 4.配置hostname解析: 5.配置时钟同步服务(ntp): 6.检查及配置内核参数: 7 ...
- NLP教程(7) - 问答系统
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- IE 浏览器将停止服务,这是真的吗?
浏览器通常是指用来检索.展示以及传递 Web 资源信息的一种应用程序,它能将网页.图片.视频等等 Web 上的信息呈现给我们. 如果现在发起一个投票:"你觉得好用的浏览器是什么?" ...
- vue设计模式
vm 的设计模式. mvvm 是 model-view-viewModel 的简写. model 是数据模块,view 是渲染视图,viewModel 是沟通视图和数据模块的桥梁. vue 中使用了哪 ...
- Node.js的多版本管理工具 gnvm(win环境)的详细安装教程(图解步骤、通俗易懂、亲测有效)
前言 本篇随笔主要写了如何安装并使用node多版本管理工具gnvm(windowns环境下) 作为自己对多版本工具gnvm知识的总结与笔记. 百度云盘gnvm应用程序包 获取链接(个人应用地址如下): ...
- 微信小程序使用echarts遇到的问题
问题1:ec-canvas出现上下滑动页面会漂移 解决方法:在标签内加 force-use-old-canvas="true" 问题2:echarts的tooltip会超出边界 解 ...
- ElasticSearch7.3学习(二十九)----聚合实战之使用Java api实现电视案例
一.数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期字段 PUT /tvs PUT /tvs/_mapping { "properties": { "price& ...
- Link-Cut-Tree(1)
参考论文 求解范围:(动态树问题) 树上路径查询.修改 动态连边.删边 换根 lca 算法逻辑 概念: 类似树链剖分,把一棵树拆成许多链,每个链用splay维护(链上的为实边,否则为虚边),splay ...