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

谁帮忙看下啊...为什么为TLE啊!!!!

Posted by dangdangwang at 2009-12-30 22:02:43 on Problem 1002
用一链表存放输入电话号码和出现次数.
建立链表的时候就是一有序链表.
算算时间不至于超时的....郁闷
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

struct telphone{
	long num;                  //电话号码
	long f;                    //出现次数
	struct telphone *next;
};

//字母映射(虽然QZ不出现,但是设置数值也没关系的)
int map[26] = {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9}; 

void main()
{
	int n;
	char temp[20];
	struct telphone *head = NULL, *p, *pp;
	int i, len;
	long tel;
	int flag = 0;
	char output[7];
	scanf("%d", &n);
	head = (struct telphone *)malloc(sizeof(struct telphone));
	head->next = NULL;
	head->num  = -1;
	head->f    = 1;
	while(n--)
	{
		tel = 0;
		scanf("%s", temp);
		len = strlen(temp);
		for(i = 0; i < len; i++)
		{
			if(temp[i] >= 'A' && temp[i] <= 'Z') tel = tel * 10 + map[temp[i] - 'A'];
			else if(temp[i] >= '0' && temp[i] <= '9') tel = tel * 10 + temp[i] - '0';
		}

		if(!(head->next))
		{
			p = (struct telphone *)malloc(sizeof(struct telphone));
			p->next = NULL;
			p->num = tel;
			p->f = 1;
			head->next = p;

			pp = (struct telphone *)malloc(sizeof(struct telphone));
			pp->next = NULL;
			pp->num = 10000000;
			pp->f = 1;
			p->next = pp;
		}
		else
		{
			p = head;
			while(p && p->next)
			{
				if(tel >= p->num && tel < p->next->num) break;
				else p = p->next;
			}
			if(p->num == tel) (p->f)++;
			else
			{
				pp = (struct telphone *)malloc(sizeof(struct telphone));
				pp->next = p->next;
				pp->num = tel;
				pp->f = 1;
				p->next = pp;
			}
		}
	}

	p = head;
	while(p)
	{
		if(p->f > 1) 
		{
			for(i = 6; i >= 0; i--)
			{
				output[i] = p->num % 10 +'0';
				p->num /= 10;
			}

			for(i = 0; i < 7; i++)
			{
				if(i == 3) printf("-");
				printf("%c", output[i]);
			}
			flag = 1;
			printf(" %ld\n", p->f);
		}
		p = p->next;
	}
	if(!flag) printf("No duplicates.\n");
}

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