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

感觉没啥问题,为什么总过不了呢??是哪部分细节?还是输出问题??谢谢

Posted by whosyourdaddy at 2006-10-26 10:50:17 on Problem 1355
#include <iostream>
#include <bitset>
#include <string>
#include <iomanip>
#include <cstdlib>

using namespace std;

const int size=60;
int score[10]={15,12,9,7,6,5,4,3,2,1};

bitset<size> bit;
int order[10];

struct teacher{
	string name;
	string depart;
	int voteboard[10];
	int score;
	int vote;
	int id;
} Teach[size];

bool check(string&, int );
void collect();
void output();

int compare(const void* a, const void* b)
{
	const teacher* x=(const teacher*)a;
	const teacher* y=(const teacher*)b;
	if(x->score > y->score)
		return -1;
	else if(x->score == y->score)
	{
		if(x->vote > y->vote)
			return -1;
		else if(x->vote == y->vote)
		{
			if(x->id < y->id)
				return -1;
		}
	}
	return 1;
}


void main()
{
	string vote;
	int NumTer,NumStu;
	int i,j,k;
	int id;
	for(i=0;i<size;i++)
		Teach[i].id=i;
	cin>>NumTer;
	while(NumTer!=-1)
	{
		cin>>NumStu;
		for(i=0;i<NumTer;i++)//输入并初始化
		{
			cin>>id;
			cin>>Teach[id].name>>Teach[id].depart;
			memset(Teach[id].voteboard, 0, sizeof(Teach[id].voteboard) );
			Teach[id].score=0;Teach[id].vote=0;
		}
		for(j=0;j<NumStu;j++)
		{
			cin>>vote;
			if(check(vote, NumTer))
				collect();
		}
		Teach[0].score=-1;Teach[0].vote=-1;//第0个元素不用,置为最小
		qsort(Teach,NumTer+1,sizeof(Teach[0]),compare);
		output();
		cin>>NumTer;
	}
}

bool check(string &vote, int NumTer)
{
	bit.reset();//初始化
	int num=0;
	int ptr=0;
	int i;
	for(i=0;i<20;i++)
	{
		num*=10;
		num+=vote[i]-'0';
		if(i%2==1)
		{
			if( num>NumTer || (num!=0 && bit.test(num)==true) )
			{
				return false;
			}
			else
				bit.set(num);
			order[ptr++]=num;
			num=0;
		}
	}
	return true;
}

void collect()
{
	int i;
	for(i=0;i<10;i++)
	{
		Teach[order[i]].voteboard[i]++;
		Teach[order[i]].vote++;
		Teach[order[i]].score+=score[i];
	}
}

void output()
{
	int i,j;
	for(i=0;i<10;i++)
	{
		cout<<setiosflags(ios::left)<<setw(4)<<i+1<<resetiosflags(ios::left)<<setfill('0')<<setw(2)<<Teach[i].id<<"  "
			<<setiosflags(ios::left)<<setfill(' ')<<setw(15)<<Teach[i].name<<setw(41)
			<<Teach[i].depart<<setw(7)<<Teach[i].score<<setw(6)<<Teach[i].vote;
		for(j=0;j<9;j++)
			cout<<setw(6)<<Teach[i].voteboard[j];
		cout<<Teach[i].voteboard[j];
		cout<<endl;
	}
}


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