| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
感觉没啥问题,为什么总过不了呢??是哪部分细节?还是输出问题??谢谢#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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator