http://acm.hdu.edu.cn/showproblem.php?pid=1236

Problem Description
今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 
每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的 
考生,并将他们的成绩按降序打印。 
 
Input
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N 
< 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一 
名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号 
(题目号由1到M)。 
当读入的考生人数为0时,输入结束,该场考试不予处理。 
 
Output
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高 
到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考 
号的升序输出。 
 
Sample Input
4 5 25
10 10 12 13 15
CS004 3 5 1 3
CS003 5 2 4 1 3 5
CS002 2 1 2
CS001 3 2 3 5
1 2 40
10 30
CS001 1 2
2 3 20
10 10 10
CS000000000000000001 0
CS000000000000000002 2 1 2
0
 
Sample Output
3
CS003 60
CS001 37
CS004 37
0
1
CS000000000000000002 20
 
题解:
字符串排序:1. 找到两个字符串的最长公共前缀 2. 比较公共前缀后面那个字符的大小即可
计算分数的和:

for(int j=1; j<=s[i].m; j++)
{
int x;
scanf("%d",&x);
s[i].add+=q[x].score;
}
 
代码:
#include <bits/stdc++.h>

using namespace std;

const int maxn = 1e5+10;
int N,M,G; struct Students
{
char id[21];
int m;
int add;
} s[maxn]; int Com(char s1[maxn],char s2[maxn])
{
int len1 = strlen(s1);
int len2 = strlen(s2);
int m = min(len1,len2);
for(int i=0; i<m; i++)
{
if(s1[i]-s2[i]>0)
return 1;
else if(s1[i]-s2[i]==0)
continue;
else
return -1;
}
if(len1==len2)
return 0;
else if(len1>len2)
return 1;
else
return -1;
} struct Q
{
int score;
int num;
} q[maxn];
void display()
{
int sum=0;
for(int i=1; i<=N; i++)
{
if(s[i].add>=G)
sum++;
}
printf("%d\n",sum);
for(int i=1; i<=N; i++)
{
if(s[i].add>=G)
printf("%s %d\n",s[i].id,s[i].add);
}
} bool cmpScore( Students& a, Students& b)
{
if(a.add==b.add)
return Com(a.id,b.id)<=0;
else
return a.add>b.add;
} int main()
{
while(~scanf("%d",&N))
{
if(N==0)
break;
scanf("%d%d",&M,&G);
for(int i=1; i<=M; i++)
{
scanf("%d",&q[i].score);
}
for(int i=1; i<=N; i++)
{
s[i].add=0;
scanf("%s%d",s[i].id,&s[i].m);
for(int j=1; j<=s[i].m; j++)
{
int x;
scanf("%d",&x);
s[i].add+=q[x].score;
}
}
int L=1,R=N;
sort(s+L,s+R+1,cmpScore);
display();
}
return 0;
}

  

HDU 1236 排名(Microsoft_zzt)的更多相关文章

  1. 题解报告:hdu 1236 排名

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1236 Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名 ...

  2. HDU 1236 排名(结构体+排序)

    今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通过分数线的 考生,并将他们的成绩按降序打 ...

  3. hdu 1236 排名(排序)

    题意:按成绩排序 思路:排序 #include<iostream> #include<stdio.h> #include<string.h> #include< ...

  4. hdu 1236 1.3.2排名

    排名 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  5. HDOJ 1236 排名(练耐心题)

    Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通 ...

  6. HDU 1236

    水题~~但我做了很久: 题意:是中国人都懂了 思路:结构体排序: 以后要多用用重定义的排序手段,!!!!!多用!!多用!!多用!! #include<iostream> #include& ...

  7. 题解 HDU 3698 Let the light guide us Dp + 线段树优化

    http://acm.hdu.edu.cn/showproblem.php?pid=3698 Let the light guide us Time Limit: 5000/2000 MS (Java ...

  8. 1236 hdu排名

    Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通 ...

  9. HDU 1285 确定比赛排名 (数组实现 )

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    ...

随机推荐

  1. 用Python读写Excel文件的方式比较

    虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TAB分割的文本文件(TSV),再在Ex ...

  2. 洛谷P4551 最长异或路径

    传送门:https://www.luogu.org/problem/show?pid=4551 在看这道题之前,我们应懂这道题怎么做:给定n个数和一个数m,求m和哪一个数的异或值最大. 一种很不错的做 ...

  3. Objective-C 图片处理

    图片处理 编码 解码 imageNamed

  4. MySQL 基础二 创建表格

    1.界面创建 2.SQL创建 教程地址:http://blog.csdn.net/brucexia/article/details/53738596 提供学习视频下载 链接:http://pan.ba ...

  5. 学习CSS布局 - 没有布局

    如果你只想把所有内容都塞进一栏里,那么不用设置任何布局也是OK的. 然而,如果用户把浏览器窗口调整的很大,这时阅读网页会非常难受: 读完每一行之后,你的视觉焦点要从右到左移动一大段距离. 试着调整下浏 ...

  6. SkylineGlobe 移动端开发测试

    基于SkylineGlobe提供的安卓版本SDK,在已有菜单中增加自定义内容,测试代码如下: 新增加文件ZhaoHeContainer.java package com.skyline.terraex ...

  7. SkylineGlobe API 如何以图层的方式导入MPT地形

    测试环境:TerraExplorer Pro 6.6; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  8. python属性查找 深入理解(attribute lookup)

    在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候. 在上一文章末尾,给出了一段代码,就涉及到descriptor与attribu ...

  9. 初识Identity(二)

    本文参考了[ASP.NET Identity系列教程(一)]ASP.NET Identity入门 一.Identity使用前准备项目 本文创建了一个名称为Users的项目.在创建过程中选择了“Empt ...

  10. linux编程之信号量

    一.概念 linux信号量: 允许多个线程同时进入临界区,可以用于进程间的同步. 和互斥锁(mutex)的区别: 互斥锁只允许一个线程进入临界区. 所在头文件: semaphore.h 二.主要函数 ...