UVA 156 Ananagrams
2015-06-18 20:45
417 查看
题目链接:
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19105
题意:
给一个字典,按字典序(大写无条件在小写前面)输出不能通过排序来在字典中找到另一个与之无大小写差别的词的词(语文好没法)
思路:
纯模拟,因为字符数组不可排序所以存储每一个词的每种字母出现次数。
源码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define gmin(a,b) a<b?a:b
char down(char a)
{
if(a>='A' && a<='Z')
return a + 'a' - 'A';
return a;
}
bool up(char c)
{
if(c >='A' && c<='Z')
return true;
return false;
}
struct D
{
char data[20+5];
}dd[1000+5];
bool cmp(D a,D b)
{
int l1 = strlen(a.data);
int l2 = strlen(b.data);
for(int i=0; i<gmin(l1,l2); i++){
if(a.data[i] != b.data[i]){
if(up(a.data[i]) * up(b.data[i]))
return a.data[i] < b.data[i];
else
return a.data[i] < b.data[i];
}
}
return l1<l2;
}
const int MAXN = 1000+5;
char dic[MAXN][20+5];
int alp[MAXN][30];
int vis[MAXN];
int main()
{
// printf("A = %d,a = %d\n",'A','a');
int cnt = 0;
char tt[20+5];
while(scanf("%s",tt) != EOF && strcmp(tt,"#")){
strcpy(dic[cnt++], tt);
}
memset(vis,0,sizeof(vis));
memset(alp,0,sizeof(alp));
for(int i=0; i<cnt; i++){
for(int j=0; j<strlen(dic[i]); j++){
alp[i][down(dic[i][j]) - 'a']++;
}
}
for(int i=0; i<cnt; i++){
for(int j=i+1; j<cnt; j++){
int ff = 1;
for(int k=0; k<26; k++){
if(alp[i][k] != alp[j][k]){
ff = 0;
break;
}
}
if(ff)
vis[i] = vis[j] = 1;
}
}
int mm = 0;
for(int i=0; i<cnt; i++)
if(vis[i] == 0)
strcpy(dd[mm++].data,dic[i]);
sort(dd,dd+mm,cmp);
for(int i=0; i<mm; i++)
printf("%s\n",dd[i].data);
return 0;
}
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19105
题意:
给一个字典,按字典序(大写无条件在小写前面)输出不能通过排序来在字典中找到另一个与之无大小写差别的词的词(语文好没法)
思路:
纯模拟,因为字符数组不可排序所以存储每一个词的每种字母出现次数。
源码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define gmin(a,b) a<b?a:b
char down(char a)
{
if(a>='A' && a<='Z')
return a + 'a' - 'A';
return a;
}
bool up(char c)
{
if(c >='A' && c<='Z')
return true;
return false;
}
struct D
{
char data[20+5];
}dd[1000+5];
bool cmp(D a,D b)
{
int l1 = strlen(a.data);
int l2 = strlen(b.data);
for(int i=0; i<gmin(l1,l2); i++){
if(a.data[i] != b.data[i]){
if(up(a.data[i]) * up(b.data[i]))
return a.data[i] < b.data[i];
else
return a.data[i] < b.data[i];
}
}
return l1<l2;
}
const int MAXN = 1000+5;
char dic[MAXN][20+5];
int alp[MAXN][30];
int vis[MAXN];
int main()
{
// printf("A = %d,a = %d\n",'A','a');
int cnt = 0;
char tt[20+5];
while(scanf("%s",tt) != EOF && strcmp(tt,"#")){
strcpy(dic[cnt++], tt);
}
memset(vis,0,sizeof(vis));
memset(alp,0,sizeof(alp));
for(int i=0; i<cnt; i++){
for(int j=0; j<strlen(dic[i]); j++){
alp[i][down(dic[i][j]) - 'a']++;
}
}
for(int i=0; i<cnt; i++){
for(int j=i+1; j<cnt; j++){
int ff = 1;
for(int k=0; k<26; k++){
if(alp[i][k] != alp[j][k]){
ff = 0;
break;
}
}
if(ff)
vis[i] = vis[j] = 1;
}
}
int mm = 0;
for(int i=0; i<cnt; i++)
if(vis[i] == 0)
strcpy(dd[mm++].data,dic[i]);
sort(dd,dd+mm,cmp);
for(int i=0; i<mm; i++)
printf("%s\n",dd[i].data);
return 0;
}
相关文章推荐
- 黑马程序员——集合框架
- startActivityForResult和setResult详解
- 创世纪
- 自学Lua(1)--Lua语法特点
- 关于nginx配置的不完全总结
- OC10_数组的内存管理
- Redis命令学习-Set(集合)
- 在Ubuntu系统中搭建本地openstack(icehouse)源
- 深入理解学习Git工作流
- 夕甲甲——孔乙己之C++版
- OC9_字符串的内存管理
- Java-马士兵设计模式学习笔记-工厂模式-模拟Spring读取Properties文件
- Java知多少(96)绘图之设置字型和颜色
- 黑马程序员--extern与函数分析
- 焦点图片效果
- OC8_setter方法展开
- 用户需求调研报告
- html
- 图像处理
- resizableImageWithCapInsets认知和对@2x图片的理解