HDU——2093考试排名(string类及其函数的运用以及istringstream)
考试排名
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11620 Accepted Submission(s): 4117
我们做好了题目的解答,提交之后,要么“AC”,要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题“AC”后,就要与你算一算帐了,总共该题错误提交了几回。虽然你在题数上,大步地跃上了一个台阶,但是在耗时上要摊上你共花去的时间。特别是,曾经有过的错误提交,每次都要摊上一定的单位时间分。这样一来,你在做出的题数上,可能领先别人很多,但是,在做出同样题数的人群中,你可能会在耗时上处于排名的劣势。
例如:某次考试一共8题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,负数表示该学生在该题上有过的错误提交次数,但到现在还没有AC,正数表示AC所耗的时间,如果正数a跟上一对括号,里面有个整数b,那就表示该学生提交该题AC了,耗去了时间a,同时,曾经错误提交了b次,因此对于下述输入数据:

若每次错误提交的罚分为20分,则其排名从高到低应该是这样的:
Josephus 5 376
John 4 284
Alice 4 352
Smith 3 167
Bob 2 325
Bush 0 0
Smith -1 -16 8 0 0 120 39 0
John 116 -2 11 0 0 82 55(1) 0
Josephus 72(3) 126 10 -3 0 47 21(2) -2
Bush 0 -1 -8 0 0 0 0 0
Alice -2 67(2) 13 -1 0 133 79(1) -1
Bob 0 0 57(5) 0 0 168 -7 0
John 4 284
Alice 4 352
Smith 3 167
Bob 2 325
Bush 0 0
这题我真是哔了狗了,本来可以第二次就A的(第一次数组开太小了)妈蛋搞了半天忘记把单位罚时这茬了,竟然直接当成20,蛋疼地交了三四次。说实话这题在寒假之前一直没把握,看了题目感觉好麻烦的样子,今天学了STL信心大增才写的这题。
代码:
#include<iostream>
#include<string>
#include<algorithm>
#include<sstream>
#include<cstdio>
#include<iomanip>
using namespace std;
struct stu
{
string na;
string timu[13];
int fashi;
int ac;
};
int power(int n)//手写pow
{
int i,sum=1;
for (i=0; i<n; i++)
{
sum=sum*10;
}
return sum;
}
int jisuan(string &str,const int fen)
{
int sum=0;
int i;
if(str.find("-")!=string::npos)
{
return sum;
}
if(str.find('(')!=string::npos||str.find(')')!=string::npos)
{
int l=str.find('('),r=str.find(')'),k=0;
for (i=r-1; i>l; i--)
{
sum=sum+(str[i]-'0')*power(k);
k++;
}
sum=sum*fen;
str.erase(l,r-l+1);//擦除括号内的内容包括括号,突然发现string::erase参数是(开始处,擦除个数),而非(begin,end).千万注意
}//此题可能后台数据的r+1会超过end,因此与end范围效果一样,可是这样写是很不安全的。
int temp;
istringstream sin(str);//使用istringstream将字符串转成数字
{
sin>>temp;
sum+=temp;
}
return sum;
}
int Ac(const string str)
{
int sum=0;
if((str.find("-")!=string::npos)||(str=="0"))
{
return sum;
}
else
{
sum=1;
return sum;
}
}
bool cmp(const stu a,const stu b)
{
if(a.ac!=b.ac)
return (a.ac>b.ac);
else
{
if(a.fashi==b.fashi)
return (a.na<b.na);
else
return (a.fashi<b.fashi);
}
}
int main(void)
{
int n,fen,j;
cin>>n>>fen;
stu person[10000];
int i,ren=0;
while(cin>>person[ren].na)
{
person[ren].fashi=0;
person[ren].ac=0;
for (i=0; i<n; i++)
{
cin>>person[ren].timu[i];
}
//输入
for (j=0; j<n; j++)
{
if(person[ren].timu[j]=="0")
continue;
else
person[ren].fashi=person[ren].fashi+jisuan(person[ren].timu[j],fen);
}
//计算罚时
for (j=0; j<n; j++)
{
if(person[ren].timu[j]=="0")
continue;
else
person[ren].ac+=Ac(person[ren].timu[j]);
}
//计算ac数
ren++;
}
sort(person,person+ren,cmp);
for (i=0; i<ren; i++)
{
char p[40]={};
(person[i].na).copy(p,(person[i].na).size(),0);
printf("%-10s %2d %4d\n",p,person[i].ac,person[i].fashi);
}
return 0;
}
HDU——2093考试排名(string类及其函数的运用以及istringstream)的更多相关文章
- HDOJ(HDU) 2093 考试排名(Arrays.sort排序、类的应用)
Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错 ...
- 题解报告:hdu 2093 考试排名
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2093 Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的 ...
- HDU 2093 考试排名 模拟题
解题报告: 题目描述:写一个程序给一个编程考试C++实时提交系统排名,给你的数据是题目的总数,每次错误提交罚的时间分,每位用户的姓名,然后是输入用户每题的完成情况,有一下几种情况,第一,输入只有一个正 ...
- HDU——1073Online Judge(string类以及其对应函数)
Online Judge Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- string类find函数返回值判定
string类find函数返回值判定 代码示例 #include<iostream> #include<cstring> using namespace std; int m ...
- C++string类常用函数
C++string类常用函数 string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初 ...
- C++ string类及其函数的讲解
文章来源于:http://www.cnblogs.com/hailexuexi/archive/2012/02/01/2334183.html C++中string是标准库中一种容器,相当于保存元素类 ...
- String 类的实现(3)String类常用函数
2 #include<iostream> 3 #include<stdio.h> 4 #include<assert.h> 5 #include <iom ...
- 洛谷 P1308 统计单词数【string类及其函数应用/STL】
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
随机推荐
- 如何处理SAP云平台错误消息 there is no compute unit quota for subaccount
当我试图部署一个应用到SAP云平台的neo环境时: 指定Compute Unit Size为Lite: 点击Deploy按钮,遇到如下错误消息:there is no compute unit quo ...
- MovieReview—Ghost in the Shell 2: Innocence(攻壳机动队2:无罪)
Doll killing event The movie was developed around a series of doll murders. Barthes and o ...
- HTML之基本语法(链接标签、路径的介绍和使用)
一.链接标签 语法:<a href="目标地址">这个标签上展示的内容</a> 作用:可以实现在当前页面跳转到新页面的操作 属性 1.target这个属性可 ...
- 剑指offer15 链表中倒数第k个结点
错误代码 class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { ) retur ...
- HTML_4
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- mysql中的空值问题
MySQL的查询如果需要用到空值的情况下,where后面的条件就需要注意了 MySQL中的表示空值的方法:is null 和 is not null 比如:select * from user whe ...
- 在无TNS配置时,登录到数据库。
sqlplus user/pw@ip:port/servicename sqlplus user/pwd@tnsname sqlplus user/pwd---aix sqlplus /nolog&g ...
- C++ 学习笔记 开篇
从大一开始学习C语言,大学期间做了许多嵌入式的开发项目,毕业后从事嵌入式开发工作主要的开发语言也是C语言.虽然期间断断续续的学习过C++,做过QT.C#上位机但也只是在其他语言的外壳下使用C在开发,始 ...
- 201621123080《Java程序设计》第三周学习总结
Week03-面向对象入门 1. 本周学习总结 2. 书面作业 1.以面向对象方式改造数据结构作业'有理数'(重点) 1.1 截图你主要代码(需要在程序中出现你的学号和姓名)并粘贴程序的git地址. ...
- oop中 限制文件类型和大小
<?php /** * Created by IntelliJ IDEA. * User: jiabinwang * Date: 7/5/18 * Time: 8:46 PM */ namesp ...