1818[成绩转换]
2013-11-14 16:10
288 查看
Description
保存学生姓名和成绩,然后通过姓名查询该学生的成绩等级。
输入为百分制的成绩,将其转换成对应的等级,具体转换规则如下:
90~100 为 A;
80~89 为 B;
70~79 为 C;
60~69 为 D;
0~59 为 E;
Input
输入有多组数据。第一行为数据组数T。
对于每组数据,第一行包含两个整数 n(1<n<=15000)和 m(1<m<=10000),n 表示学生个数,m 表示查询次数。接下来 n 行,每行包含一名学生的姓名和成绩。再接下来 m 行,每行一个字符串,表示学生姓名。
注意: 数据有可能有重复名字的学生,以最后一次出现的成绩为准。
Output
对于每个查询,输出一行, 表示该学生成绩等级。如果输入数据不在 0~100 范围内,请输出一行:“Score is error!”。
=========================================================
题目不难
但是主要问题是数据量很大,最多会有15000个数据。所以普通算法虽然很好写,但是因为超时所以不能够通过。
之前写了1817,这里先是以为是cin和scanf的问题,后来发现也不是。
然后看了大牛们的代码,才知道需要用哈希或者map解决。
#include<iostream>
#include<string>
using namespace std;
struct Student
{
string Name;
int Score;
};
void Grade( int score )
{
int level;
level = score / 10;
switch ( level )
{
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
{
cout << 'E' << endl;
break;
}
case 6 :
cout << 'D' << endl;
break;
case 7 :
cout << 'C' << endl;
break;
case 8 :
cout << 'B' << endl;
break;
case 9 :
case 10 :
cout << 'A' << endl;
break;
default:
cout << "Score is error!" << endl;
}
}
int main()
{
string name;
Student S[15000];
int n, m, i, j;
int count;
cin >> count;
while( count-- )
{
cin >> n >> m;
for( i = 0; i < n; i++ )
{
cin >> S[i].Name >> S[i].Score;
}
while( m-- )
{
cin >> name;
for( i = 0; i < n; i++ )
if( name == S[i].Name )
Grade( S[i].Score );
}
}
return 0;
}
下面研究下哈希的使用。
保存学生姓名和成绩,然后通过姓名查询该学生的成绩等级。
输入为百分制的成绩,将其转换成对应的等级,具体转换规则如下:
90~100 为 A;
80~89 为 B;
70~79 为 C;
60~69 为 D;
0~59 为 E;
Input
输入有多组数据。第一行为数据组数T。
对于每组数据,第一行包含两个整数 n(1<n<=15000)和 m(1<m<=10000),n 表示学生个数,m 表示查询次数。接下来 n 行,每行包含一名学生的姓名和成绩。再接下来 m 行,每行一个字符串,表示学生姓名。
注意: 数据有可能有重复名字的学生,以最后一次出现的成绩为准。
Output
对于每个查询,输出一行, 表示该学生成绩等级。如果输入数据不在 0~100 范围内,请输出一行:“Score is error!”。
=========================================================
题目不难
但是主要问题是数据量很大,最多会有15000个数据。所以普通算法虽然很好写,但是因为超时所以不能够通过。
之前写了1817,这里先是以为是cin和scanf的问题,后来发现也不是。
然后看了大牛们的代码,才知道需要用哈希或者map解决。
#include<iostream>
#include<string>
using namespace std;
struct Student
{
string Name;
int Score;
};
void Grade( int score )
{
int level;
level = score / 10;
switch ( level )
{
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
{
cout << 'E' << endl;
break;
}
case 6 :
cout << 'D' << endl;
break;
case 7 :
cout << 'C' << endl;
break;
case 8 :
cout << 'B' << endl;
break;
case 9 :
case 10 :
cout << 'A' << endl;
break;
default:
cout << "Score is error!" << endl;
}
}
int main()
{
string name;
Student S[15000];
int n, m, i, j;
int count;
cin >> count;
while( count-- )
{
cin >> n >> m;
for( i = 0; i < n; i++ )
{
cin >> S[i].Name >> S[i].Score;
}
while( m-- )
{
cin >> name;
for( i = 0; i < n; i++ )
if( name == S[i].Name )
Grade( S[i].Score );
}
}
return 0;
}
下面研究下哈希的使用。
相关文章推荐
- Sicily 1818. 成绩转换
- sicily1818 成绩转换
- sicily--1818. 成绩转换
- sicily 1818.成绩转换
- sicily 1818 成绩转换
- Sicily 1818. 成绩转换
- Sicily 1818. 成绩转换
- Sicily 1818. 成绩转换
- 98 成绩转换
- HDU2004---成绩转换
- 成绩转换 AC 杭电
- 成绩转换hdu2004
- 【ACM】成绩转换
- HDU 2004 - 成绩转换
- hdu 2004 成绩转换
- 成绩转换 NYOJ 98
- 南阳理工 98 成绩转换
- HDU--2004 -- 成绩转换
- 分支-06. 成绩转换(15)
- 2004-输入一个百分制的成绩t,将其转换成对应的等级