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】
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
随机推荐
- UI的组织形式
UI的组织形式是树状结构: 根据层次的不同分为叶子节点和干节点. 叶子节点负责简单的信息展示. 复杂的主干复杂叶子节点的组织和整体展示. http://www.cnblogs.com/feng9exe ...
- Set、Map及数组去重
https://cloud.tencent.com/developer/article/1437254 https://blog.csdn.net/weixin_34247299/article/de ...
- 前端安全系列(二):如何防止CSRF攻击?
前端安全系列(二):如何防止CSRF攻击? 背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点.在移动互联网时代,前端人员除了传统的 XS ...
- CentOS更改时区
1.编辑文件 vi /etc/sysconfig/clock 修改内容 ZONE="Asia/Shanghai" 2.覆盖旧时区文件 cp /usr/share/zoneinfo/ ...
- samba修改smb.conf后,不需要重启服务,就可生效
在修改完smb.conf后,不需要重启服务.在Centos7.3与Ubuntu18.04上验证都没有问题. 猜测可能的原因:samba是在客户端进行连接时,smb服务程序读取smb.conf配置文件信 ...
- vue跨域处理(vue项目中baseUrl设置问题)
1.开发环境: 2.生产环境: 然后 const instance = axios.create({ baseURL: process.env.API })
- beta版和alpha版
外部测试版的意思. 软件会出现三种版本 1.alpha内部测试版本,极不稳定,一般也不会出现的公众视线,仅供内部测试人员测试用. 2.beta公共测试版,就是对外发布软件的测试版,收集公众的意见和建议 ...
- mysql绿色版下载及应用
一.mysql绿色版下载 第一歩:打开下载网址:https://www.oracle.com 点击Menu-->Database and Technologies-->Databases- ...
- SpringBoot(一)_Eclipse的安装和使用
1.Eclipse中安装STS插件: Help -> Eclipse Marketplace… Search或选择“Popular”标签,选择Spring Tool Suite (STS) fo ...
- matplotlib学习记录 七
# 绘制直方图 # 假设你获取了250部电影的时长(列表a中),希望统计出这些电影时长的分布状态(比如时长为100分钟到 # 120分钟电影的数量,出现的频率)等信息,你应该如何呈现这些数据? fro ...