讨论 / 吐血!!!!!
飞雪天涯 2010-12-05 14:51:00
点我顶贴 收藏 删除
做的时候:

/*

比赛(Test):查看题目 Show Problem

赛题题目:成绩单

所属比赛:第一届AC-XL杯NOIP08提高模拟赛

问题编号:378 [提交该赛题]

描述: 衡中的学生很郁闷啊!每天都要考试,考不好了还要挨批斗~~~~~

又考试了,这次考试的人数特别多,每个人的学号很特别,是用字符串表示的,(不超过30 位),可是学校负责考试的老师

请假回家了,所以这次考试没有人安排考场了。

无奈啊~~~~~~

所以m哥决定让学生在自己的座位上考试,实行诚实考试制度(没有监考老师)。衡中的学生很听话啊~~~~,每个人都没有作

弊。

但是录分、统计成了问题,学生的考试成绩放在了输入文件中。

m哥今天太累了,但是他还是很关心学生的成绩的,于是他让你把学生的成绩按学号排列(字典顺序,学号全为小写字母,从

小到大排列)(不排成绩),并统计各个分数,及分数段的人数,以及满分人员(满分要XX奖学金的,虽然一般只有几十块

-_-bbb)

【输入数据】

第一行:一个数 n (n<=130000人)

以下n行:每行两个信息,分别为学号,分数(1~150分)

输入格式: 第一行:一个数 n (n<=130000人)

以下n行:每行两个信息,分别为学号,分数(1~150分)

输出格式: 第一行 各个分数段(空格隔开)(例如 1~10 11~20 ……(见例样输出,不包括150分的人数))

第二行 各个分数段的人数(空格隔开,没有则输出0 )

接下来的n 行,分别为n个学生的学号,成绩,(空格隔开)

再接下来的一行为满分的人的人数x(如果没有则为0)(保证x不超过10000)

接下来的x行为满分人的学号(如果x为0则为一行‘No’)(按字典序从小到大排序)

每一行的每一个数据之间用空格隔开,最后一个数据后不允许有空格。

输入文件: 直接输入即可

输出文件: 直接输出即可 注意,不要在最后输出空行或空格!

样例输入: 3

bid 50

wxy 85

alc 55

样例输出: 1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129 130~139 140~149

0 0 0 0 0 2 0 0 1 0 0 0 0 0 0

alc 55

bid 50

wxy 85

0

No

*/

#include<iostream>

#include<string>

#define MAXN 130000

#define MAXFULL 10000

using namespace std;

int seg[16];

struct students{

string id;

int mark;

} stu[MAXN];

string fullmrk[MAXFULL];

int partition(int i,int j){

students pivotkey=stu[i];

while (i<j){

while(i<j&&pivotkey.id<=stu[j].id) --j;

if (i<j) stu[i++]=stu[j];

while(i<j&&pivotkey.id>=stu[i].id) ++i;

if (i<j) stu[j--]=stu[i];

}

stu[i]=pivotkey;

return i;

}

void qsort(int i,int j){

if (i>=j) return;

int key=partition(i,j);

qsort(i,key-1);

qsort(key+1,j);

}

/*

int part(int i,int j){

string pivotkey=fullmrk[i];

while (i<j){

while(i<j&&pivotkey<=fullmrk[j]) --j;

if (i<j) fullmrk[i++]=fullmrk[j];

while(i<j&&pivotkey>=fullmrk[i]) ++i;

if (i<j) fullmrk[j--]=fullmrk[i];

}

fullmrk[i]=pivotkey;

return i;

}

void quick(int i,int j){

if (i>=j) return;

int key=part(i,j);

quick(i,key-1);

quick(key+1,j);

}

*/

int main (void){

int index=0;

memset(seg,0,sizeof(seg));

int n;scanf("%d",&n);

char s[30];

for (int i=0;i<n;++i){

scanf("%s",s);

stu[i].id=s;

scanf("%d",&stu[i].mark);

if (stu[i].mark!=0)++seg[stu[i].mark/10];

}

printf("1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129 130~139 140~149\n");

for (int i=0;i<15;++i){

if (i!=0) printf(" ");

printf("%d",seg[i]);

}

printf("\n");

qsort(0,n-1);

for (int i=0;i<n;++i){

printf("%s %d\n",stu[i].id.c_str(),stu[i].mark);

if (stu[i].mark==150)

fullmrk[index++]=stu[i].id;

}

printf("%d\n",seg[15]);

if (seg[15]==0) printf("No");

else{

//quick(0,index-1);

for (int i=0;i<index;++i){

if (i!=0) printf(" ");

printf("%s",fullmrk[i].c_str());

}

}

//while(1);

return 0;

}

//God Bless

//Jesus Bless

//Athena Bless

//Venus Bless

//Ru lai Bless

//Guan Yin Bless

//Di Zang Bless

//All The Gods Will Bless

//I Bless For Every God

//I Would Like To AC

AC后:

/*

比赛(Test):查看题目 Show Problem

赛题题目:成绩单

所属比赛:第一届AC-XL杯NOIP08提高模拟赛

问题编号:378 [提交该赛题]

描述: 衡中的学生很郁闷啊!每天都要考试,考不好了还要挨批斗~~~~~

又考试了,这次考试的人数特别多,每个人的学号很特别,是用字符串表示的,(不超过30 位),可是学校负责考试的老师

请假回家了,所以这次考试没有人安排考场了。

无奈啊~~~~~~

所以m哥决定让学生在自己的座位上考试,实行诚实考试制度(没有监考老师)。衡中的学生很听话啊~~~~,每个人都没有作

弊。

但是录分、统计成了问题,学生的考试成绩放在了输入文件中。

m哥今天太累了,但是他还是很关心学生的成绩的,于是他让你把学生的成绩按学号排列(字典顺序,学号全为小写字母,从

小到大排列)(不排成绩),并统计各个分数,及分数段的人数,以及满分人员(满分要XX奖学金的,虽然一般只有几十块

-_-bbb)

【输入数据】

第一行:一个数 n (n<=130000人)

以下n行:每行两个信息,分别为学号,分数(1~150分)

输入格式: 第一行:一个数 n (n<=130000人)

以下n行:每行两个信息,分别为学号,分数(1~150分)

输出格式: 第一行 各个分数段(空格隔开)(例如 1~10 11~20 ……(见例样输出,不包括150分的人数))

第二行 各个分数段的人数(空格隔开,没有则输出0 )

接下来的n 行,分别为n个学生的学号,成绩,(空格隔开)

再接下来的一行为满分的人的人数x(如果没有则为0)(保证x不超过10000)

接下来的x行为满分人的学号(如果x为0则为一行‘No’)(按字典序从小到大排序)

每一行的每一个数据之间用空格隔开,最后一个数据后不允许有空格。

输入文件: 直接输入即可

输出文件: 直接输出即可 注意,不要在最后输出空行或空格!

样例输入: 3

bid 50

wxy 85

alc 55

样例输出: 1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129 130~139 140~149

0 0 0 0 0 2 0 0 1 0 0 0 0 0 0

alc 55

bid 50

wxy 85

0

No

*/

#include<iostream>

#include<string>

#define MAXN 130000

#define MAXFULL 10000

using namespace std;

int seg[16];

struct students{

string id;

int mark;

} stu[MAXN];

string fullmrk[MAXFULL];

int partition(int i,int j){

students pivotkey=stu[i];

while (i<j){

while(i<j&&pivotkey.id<=stu[j].id) --j;

if (i<j) stu[i++]=stu[j];

while(i<j&&pivotkey.id>=stu[i].id) ++i;

if (i<j) stu[j--]=stu[i];

}

stu[i]=pivotkey;

return i;

}

void qsort(int i,int j){

if (i>=j) return;

int key=partition(i,j);

qsort(i,key-1);

qsort(key+1,j);

}

/*

int part(int i,int j){

string pivotkey=fullmrk[i];

while (i<j){

while(i<j&&pivotkey<=fullmrk[j]) --j;

if (i<j) fullmrk[i++]=fullmrk[j];

while(i<j&&pivotkey>=fullmrk[i]) ++i;

if (i<j) fullmrk[j--]=fullmrk[i];

}

fullmrk[i]=pivotkey;

return i;

}

void quick(int i,int j){

if (i>=j) return;

int key=part(i,j);

quick(i,key-1);

quick(key+1,j);

}

*/

int main (void){

int index=0;

memset(seg,0,sizeof(seg));

int n;scanf("%d",&n);

char s[30];

for (int i=0;i<n;++i){

scanf("%s",s);

stu[i].id=s;

scanf("%d",&stu[i].mark);

if (stu[i].mark!=0)++seg[stu[i].mark/10];

}

printf("1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129 130~139 140~149\n");

for (int i=0;i<15;++i){

if (i!=0) printf(" ");

printf("%d",seg[i]);

}

printf("\n");

qsort(0,n-1);

for (int i=0;i<n;++i){

printf("%s %d\n",stu[i].id.c_str(),stu[i].mark);

if (stu[i].mark==150)

fullmrk[index++]=stu[i].id;

}

printf("%d\n",seg[15]);

if (seg[15]==0) printf("No");

else{

//quick(0,index-1);

for (int i=0;i<index;++i){

if (i!=0) printf("\n");

printf("%s",fullmrk[i].c_str());

}

}

//while(1);

return 0;

}

//God Bless

//Jesus Bless

//Athena Bless

//Venus Bless

//Ru lai Bless

//Guan Yin Bless

//Di Zang Bless

//All The Gods Will Bless

//I Bless For Every God

//I Would Like To AC

55555555555555555555555555555555555555555555555555

55555555555555555555555555555555555555555555555555

55555555555555555555555555555555555555555555555555

55555555555555555555555555555555555555555555555555

55555555555555555555555555555555555555555555555555

#1 飞雪天涯@2008-11-03 22:40:00
回复 删除
居然要换行!!!!
#2 ply_py@2010-12-05 14:08:00
回复 删除
他娘的...无限WA中...此题数据太xx了
#3 Mine_ysd@2010-12-05 14:35:00
回复 删除
鄙视此题....pascal快排都不能Ac......
#4 ply_py@2010-12-05 14:51:00
回复 删除
终于ac了

感觉真tm爽...

这道题让俺找到了我以前学C的时候做一个数据管理系统时候的感觉...

(话说那个一个文件就上千行代码...)

俺一开始的时候的算法

各种类型转换来转换去...

指针的指针xx的xx...

虽说只有二维...

现在想想,当时再学C++是一个非常明智的选择啊...

查看更多回复
提交回复