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

为什么会错呢?bow

Posted by mengzhu929 at 2007-06-07 00:39:52 on Problem 2153
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

int result[50];
char name[50];
int n; int m;
struct student_node
{
	char name[50];
	int  score;
	student_node* next;
};

student_node* student_list[1000];

void init()
{
	memset(result, 0, sizeof(result));
	n = 0;
	for(int i = 0; i < 1000; i++)
		student_list[i] = NULL;
}

int get_hash(char* key)
{

	unsigned long h =0 ;
	while (*key){
		h = (h <<4) + *key++;
		unsigned long g = h &0xF0000000L;
		if (g)h^=g>>24;
		h&=~g;
	}
	return h & 1000;
}

void read_name()
{
	for(int i = 0; i < n; i++)
	{
		int pos = 0;	char c;
		memset(name, '\0', sizeof(name));
		while((c = getchar()) != '\n')
			name[pos++] = c;
		
		int hash_value = get_hash(name);
		
		student_node* temp = (student_node*)malloc(sizeof(student_node));
		memset(temp->name, '\0', sizeof(temp->name));
		temp->score = 0;
		temp->next = NULL;

		memcpy(temp->name, name, sizeof(name));
		student_node* p = student_list[hash_value];
		student_list[hash_value] = temp;
		temp->next = p;
	}
}

void rank_student(int i)
{
	for(int k = 0; k < n; k++)
	{
		int score;
		char buf[50]; memset(buf, '\0', sizeof(buf));
		
		scanf("%d ", &score);
		int pos = 0;	char c;
		int name_start = 0;
		while((c = getchar()) != '\n')
			buf[pos++] = c;
		
		int hash_value = get_hash(buf);
		student_node* p = student_list[hash_value];
		while(strcmp(buf, p->name) != 0)
			p = p->next;
		p->score += score;
	}
	int index_hash = get_hash("Li Ming");
	student_node* temp = student_list[index_hash];
	while(strcmp(temp->name, "Li Ming") != 0)
		temp = temp->next;
	int index_score = temp->score;
	int count = 1;
	for(int k = 0; k < 1000; k++)
	{
		if(student_list[k] != NULL)
		{
			student_node* p = student_list[k];
			while(p != NULL)
			{
				if(p->score > index_score)
					count++;
				p = p->next;
			}
		}
	}
	printf("%d\n", count);
}

int main(int argc, char* argv)
{
	init();
	scanf("%d\n", &n);
	read_name();
	scanf("%d\n", &m);
	for(int i = 0; i < m; i++)
		rank_student(i);
	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