uva 755 (487--3279)排序

这是一简单的排序,之所以把这道题放上面呢,是因为我在这道题上实在wa太多了,wa了7次,中间找出来

个错误,就是在倒数第一个和倒数第二个相等的情况下我没有输出他们的个数,改正后还是wa,最后我发现原来是每组

数据之间输出一个空行。。。。。坑了我好久,一直以为是每组后面都有空行。。。

放代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//char a[100005];
char a[100005][1000];
char b[100005][1000];
int cmp(const void *a,const void *b)
{
	return strcmp((char *)a,(char *)b);
}
int main()
{
	int n,t,i,j,lena,k;
	scanf("%d",&t);

	while(t--)
	{
		memset(a,'\0',sizeof(a));
		memset(b,'\0',sizeof(b));
		scanf("%d",&n);
		for(k=0; k<n; k++)
		{
			scanf("%s",a[k]);
			lena = strlen(a[k]);
			j=0;
			for(i=0;i<lena; i++)
			{
				if(a[k][i]!='-')
				{
					if(a[k][i]>='A'&&a[k][i]<='Z')
					{
					switch (a[k][i])
					{
						case 'A':
						case 'B':
						case 'C':b[k][j++]='2';break;
						case 'D':
						case 'E':
						case 'F':b[k][j++]='3'; break;
						case 'G':
						case 'H':
						case 'I':b[k][j++]='4'; break;
						case 'J':
						case 'K':
						case 'L':b[k][j++]='5'; break;
						case 'M':
						case 'N':
						case 'O':b[k][j++]='6'; break;
						case 'P':
						case 'R':
						case 'S':b[k][j++]='7'; break;
						case 'T':
						case 'U':
						case 'V':b[k][j++]='8'; break;
						case 'W':
						case 'X':
						case 'Y':b[k][j++]='9'; break;
					}
				    }
				    else
				    	b[k][j++]=a[k][i];
				}

			}
			b[k][j]='\0';
		//	puts("###################");-
			//printf("%s\n",b[k]);
		}
		qsort(b,n,sizeof(b[0]),cmp);
		//puts("**********************");
	//	for(i=0; i<n; i++)
		//	puts(b[i]);
		int sum=1;
		int flag=0;
		int FLAG=0;
		for(k=0; k<n-1; k++)
		{
		//	puts(b[k]);
			if(!strcmp(b[k],b[k+1]))
			{
				sum++;
				flag=1;
				if(sum==2)
				{
					for(j=0; b[k][j]!='\0'; j++)
					{
						printf("%c",b[k][j]);
						if(j==2)
							printf("-");
					}
					FLAG=1;
				}
				if(k+1==n-1)
					printf(" %d\n",sum);
					//printf("%s ",b[k]);
			}
			else
			{
				if(flag)
				{
				 	printf(" %d\n",sum);
				 	sum=1;
				}
				flag=0;
			}
		}
		if(FLAG==0)
			puts("No duplicates.");
		if(t!=0)
			puts("");
	}
	return 0;
}
时间: 2024-10-27 13:34:40

uva 755 (487--3279)排序的相关文章

487--3279 UVA 755 其实有三种解法

说说:这道题初看挺简单的,题意无非就是将一串字符转化成一个用'-'隔开的电话号码,然后把出现超过一次的号码按照字典升序输出即可.但是这样样做是会超时的....其实把电话号码中间的'-'去掉,电话号码其实就是一个整数,有了这个想法那就简单啦.只要设立一个超大的数组包含所有可能的电话号码,然后数组的值是该号码出现的次数,统计完后遍历一遍输出即可.但是第三种相当于把前两种方法法结合起来了.把号码当成一个整数,但是号码存储在一个数组中,号码出现的次数存储在另一个数组中.这样在插入新号码的时候就排序,然后

uva 755

题目 Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or phrase. For example, you can call the University of Waterloo by dialing the memorable TUT-GLOP. Sometimes onl

Uva 10305 给任务排序

题目链接:https://uva.onlinejudge.org/external/103/10305.pdf 紫书P167 拓扑排序. dfs——从一个点出发,dfs 与之相连的所有点,把本身放入到拓扑排序的首部. #include <bits/stdc++.h> using namespace std; const int Maxn = 1000; int G[Maxn][Maxn]; int topo[Maxn]; int c[Maxn]; int n,m,t; bool dfs(int

Uva 755 487-3125

分析: 这道题是刘汝佳灰书上所给的一道题.题目很简单,就是处理字符串并排序输出.但我却卡了很久,试了很多不同的方式,至今使用字符串的一个还没有调试出来.POJ 1002是一道几乎相同的题(不过没有多组数据). 注意事项: 1. 数据量很大,最好不用cin/cout(当然也可以取消std::同步). 2. 每个电话号码的初始输入可能很长. 3. 号码长度不够时要补0. //用整数处理字符串(UVa已过)#include<iostream> #include<cstdio> #incl

UVA 1423 - Guess(拓扑排序)

UVA 1423 - Guess 题目链接 题意:给定一个每个区间和的正负,构造一个序列,使得满足这个矩阵 思路:每个区间和等于两个前缀和的差,这样就可以知道每两个前缀和的大小关系,利用拓扑排序可以求出顺序,然后对应要控制不超过|10|,所以从-10开始,大的就+1,然后构造出这个前缀和序列,对应每个ai就等于c[i] - c[i - 1] 代码: #include <cstdio> #include <cstring> #include <vector> #inclu

uva 755 - 487--3279

1 #include <iostream> 2 #include <string> 3 #include <map> 4 #include <algorithm> 5 #include <cstdio> 6 #include <cctype> 7 using namespace std; 8 9 const char kTable[] = "2223334445556667Q77888999Z"; 10 int m

UVA 156-Ananagrams(字符串排序按序输出无重复单词)

Ananagrams Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description  Ananagrams  Most crossword puzzle fans are used to anagrams--groups of words with the same letters in different orders--for example OPTS, SPO

uvalive 6393(uva 1572) Self-Assembly 拓扑排序

题意: 给出一些正方形,这些正方形的每一条边都有一个标号,这些标号有两种形式:1.一个大写字母+一个加减号(如:A+, B-, A-......), 2.两个0(如:00):这些正方形可以随意翻转和旋转,当两个正方形通过旋转或翻转,使得他们的公共边为相同大写字母并且符号相反时,他们就可以彼此结合拼在一起,现在给出n中正方形,每种正方形有无限多种,问这些正方形能否拼成一个无限大的结构. 题解: 容易想到,要使这些正方形形成无限大地结构,那么这些正方形通过拼接后一定能循环(即通过不断地拼接出现了和以

小白书练习题5.5.3 排序检索类、

UVA 340 Master-Mind Hints 题意:猜数字游戏,给n个数的序列给你.接下来一行是答案序列.剩下的都是猜测序列.对于每一个猜测序列,统计有多少个数字相同并且位置相同.有多少数字相同位置不同.每一个数字只能用一次. 思路:直接统计可以求出数字相同并且位置相同的哪一些数.在此过程中我加了一个标记数组.标记那些用过的数的位置为1,没用过为0:然后枚举猜测中哪些没用过的数字.去答案序列中找.当数字相等并且答案行中那个数也没用过时.计数加1: 1 #include<cstdio> 2