Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

奔溃了,测试数据都过了,但一直WA

Posted by haipeng31 at 2010-11-21 18:38:46 on Problem 1256
#include <stdio.h>
#include <string.h>
#include <ctype.h>

char output[16];
int used[33];

int getindex(char c)
{
	if(isupper(c)) {
		return (c-'A')*2 + 1;
	}
	else {
		return (c-'a')*2 + 2;
	}
}

void initused(char *src)
{
	int i;
	for(i = 1; i <= 32; i++)
	{
		used[i] = 0;
	}
	
	while(*src) {
		used[getindex(*src)] += 1;
		src++;
	}
	
}

void quicksort(char *src, int l, int r)
{
	int p;
	int j;
	char temp;
	if(l < r) {
		p = l+1;
		j = l+1;
		while(j <= r) {
			if(getindex(src[j]) < getindex(src[l])) {
				temp = src[j];
				src[j] = src[p];
				src[p] = temp;
				p++;
			}
			j++;
		}
		temp = src[p-1];
		src[p-1] = src[l];
		src[l] = temp;
		quicksort(src, l, p-1);
		quicksort(src, p, r);
	}
}

void dfs(char *src, int index, int n)
{
	int i;
	if(index == n) {
		printf("%s\n", output);
		return;
	}
	else {
		for(i = 0; i < n; i++)
		{
			if(used[getindex(src[i])] > 0) {
				output[index] = src[i];
				used[getindex(src[i])]--;
				dfs(src, index+1, n);
				output[index] = '\0';
				used[getindex(src[i])]++;
				while(i+1 < n && src[i+1] == src[i]) {
					i++;
				}
			}
		}
	}
}

int main()
{
	char src[16];
	int n;
	int testnum;

	scanf("%d", &testnum);
	while(testnum-- > 0) {
		scanf("%s", src);
		initused(src);
		n = strlen(src);
		quicksort(src, 0, n-1);
		dfs(src, 0, n);
	}
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator