Time Limit:3000MS     Memory Limit:0KB 
Description
Most crossword puzzle fans are used to anagrams--groups of words with the same letters in different orders--for example OPTS, SPOT, STOP, POTS and POST. Some words however do not have this attribute, no matter how you rearrange their letters, you cannot form another word. Such words are called ananagrams, an example is QUIZ.
Obviously such definitions depend on the domain within which we are working; you might think that ATHENE is an ananagram, whereas any chemist would quickly produce ETHANE. One possible domain would be the entire English language, but this could lead to some problems. One could restrict the domain to, say, Music, in which case SCALE becomes a relative ananagram (LACES is not in the same domain) but NOTE is not since it can produce TONE.
Write a program that will read in the dictionary of a restricted domain and determine the relative ananagrams. Note that single letter words are, ipso facto, relative ananagrams since they cannot be ``rearranged'' at all. The dictionary will contain no more than 1000 words.
Input
Input will consist of a series of lines. No line will be more than 80 characters long, but may contain any number of words. Words consist of up to 20 upper and/or lower case letters, and will not be broken across lines. Spaces may appear freely around words, and at least one space separates multiple words on the same line. Note that words that contain the same letters but of differing case are considered to be anagrams of each other, thus tIeD and EdiT are anagrams. The file will be terminated by a line consisting of a single #.
Output
Output will consist of a series of lines. Each line will consist of a single word that is a relative ananagram in the input dictionary. Words must be output in lexicographic (case-sensitive) order. There will always be at least one relative ananagram.
Sample input
ladder came tape soon leader acme RIDE lone Dreis peat
 ScAlE orb  eye  Rides dealer  NotE derail LaCeS  drIed
noel dire Disk mace Rob dries
#
Sample output
Disk
NotE
derail
drIed
eye
ladder
soon

题解:

  1. 去掉输入过程中重复的单词,需要对统一小写后的单词排序,例如 aab cdf frf aab AaB,小写排序后是aab aab aab cad frf,那么很容易遍历一遍进行标记,将输入重复的单词只保留一个。

  2. ​ 寻找回文,例如adc cda utg 三个单词,对每一个单词进行字母排序后再整体排序,排序结果是:acd acd gtu ,出现次数大于一次的很显然是回文, 那么和上面一样,很容易遍历2遍后将出现次数大于一次的单词去掉。最后剩下的就是非回文。然后对非回文进行排序输出即可。

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cctype>
using namespace std;
string ss[10000];
char s[100];
int k,k2,tag[10000];
struct Node{
string ori,low,sor;//ori原始输入,low小写处理,sor字母排序
}str[10000];
bool cmp1(Node a,Node b){//按照小写后单词进行排序处理
return a.low < b.low;
}
bool cmp2(Node a,Node b){//按照字母排序后的单词排序处理
return a.sor < b.sor;
}
void set(Node&b,Node&a){//赋值操作
b.ori = a.ori;b.low = a.low;b.sor=a.sor;
}
int main(){
//freopen("1.in","r",stdin);
while(scanf("%s",s)!=EOF && s[0]!='#'){
str[k].ori = s;
for(int i=0;s[i];i++)s[i]=tolower(s[i]);
str[k].low = s ;//小写
sort(s,s+strlen(s));
str[k++].sor = s;//排序
}
//对小写后的单词进行排序,目的是去除输入过程中重复的单词
sort(str,str+k,cmp1);
string pre = "";
for(int i=0;i<k;i++){
if(str[i].low == pre)tag[i]=1;
pre = str[i].low;
}
for(int i=0;i<k;i++){
if(!tag[i])set(str[k2++],str[i]);
else tag[i]=0;
}
//对字母排序后的单词排序,目的是寻找回文单词
k = k2;
sort(str,str+k,cmp2);
pre = "";
for(int i=0;i<k;i++){
if(str[i].sor == pre)tag[i]=1;
pre = str[i].sor;
}
for(int i=0;i<k;i++)
if(tag[i])tag[i-1]=1;
k2=0;
for(int i=0;i<k;i++)
if(!tag[i])ss[k2++]=str[i].ori;
//最后对原始输入排序输出。
sort(ss,ss+k2);
for(int i=0;i<k2;i++)
cout << ss[i]<<endl;
}

  

Winter-2-STL-F Ananagrams 解题报告及测试数据的更多相关文章

  1. sgu 104 Little shop of flowers 解题报告及测试数据

    104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...

  2. Spring-1-I 233 Matrix(HDU 5015)解题报告及测试数据

    233 Matrix Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Descript ...

  3. Spring-1-H Number Sequence(HDU 5014)解题报告及测试数据

    Number Sequence Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Pro ...

  4. Spring-1-F Dice(HDU 5012)解题报告及测试数据

    Dice Time Limit:1000MS     Memory Limit:65536KB Description There are 2 special dices on the table. ...

  5. Spring-1-E Game(HDU 5011)解题报告及测试数据

    Game Time Limit:1000MS     Memory Limit:65536KB Description Here is a game for two players. The rule ...

  6. Spring-1-A Post Robot(HDU 5007)解题报告及测试数据

    Post Robot Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K Problem Description ...

  7. Winter-1-F Number Sequence 解题报告及测试数据

    Time Limit:1000MS     Memory Limit:32768KB Description ​A number sequence is defined as follows:f(1) ...

  8. sgu 103 Traffic Lights 解题报告及测试数据

    103. Traffic Lights Time limit per test: 0.25 second(s) Memory limit: 4096 kilobytes 题解: 1.其实就是求两点间的 ...

  9. Spring-2-H Array Diversity(SPOJ AMR11H)解题报告及测试数据

    Array Diversity Time Limit:404MS     Memory Limit:0KB     64bit IO Format:%lld & %llu   Descript ...

随机推荐

  1. Splash界面完美实现

    Flash闪烁界面的实现原理 1.首先 new一个数组里面放一些Random图片 private int[] drawables = new int[]{R.drawable.a,R.adable.b ...

  2. 说说M451例程之PWM的寄存器讲解

    M451提供了两路PWM发生器.每路PWM支持6通道PWM输出或输入捕捉.有一个12位的预分频器把时钟源分频后输入给16位的计数器,另外还有一个16位的比较器.PWM计数器支持向上,向下,上下计数方式 ...

  3. Android得到SD卡文件夹大小以及删除文件夹操作

    float cacheSize = dirSize(new File(Environment.getExternalStorageDirectory() + AppConstants.APP_CACH ...

  4. Fragment、FragmentTabHost以及RadioGroup框架

    package com.dotfive.chuanbang.activity; import test.Fragment1; import test.Fragment1.OnBackListener; ...

  5. vue通信

    组件实例的作用域是孤立的. 一.父子通信 父组件通过props向下传递数据给子组件,子组件通过events给父组件发送消息. 要让子组件使用父组件的数据,我们需要通过子组件的props选项.prop是 ...

  6. Linux 磁盘管理的命令

    Linux   磁盘管理 磁盘分区及挂载: 先查询系统的使用情况: 使用fdisk -l语句 查询结果: 进行磁盘的新建:***添加磁盘时系统必须处于关机状态** 在进行对系统磁盘的使用情况的查询 查 ...

  7. Python--进阶处理6

    # =================第六章:数据编码和处理====================== # 读CSV文件# 数据读取为一个元组的序列import csv# with open('E: ...

  8. APACHE优化参数

    1.CentOS5.8 x86_64位 采用最小化安装,系统经过了基本优化篇2.apache版本:httpd-2.2.293.源码包存放位置:/home/oldboy/tools4.源码包编译安装位置 ...

  9. nodejs(一)

    nodejs第一章节 使用node来实现第一个http服务器 var http = require(‘http’); http.createServer(function (request, resp ...

  10. 【转】VMwareCLI命令参考

    VMwareCLI命令参考 目录 基本命令范例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2 ...