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】
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
随机推荐
- 通过存储过程批量生成spool语句
过存储过程批量生成spool语句 CREATE OR REPLACE PROCEDURE pro_yx_full_txt IS export_handle UTL_FILE.file_type; v_ ...
- vue入坑教程(二)在vue项目中如何导入element以及sass
在项目中导入element以及sass.stylus等方便开发的工具以及UI框架 (1)如何在vue项目中导入elementUI框架 elementUI是饿了么团队开发出来基于vue的前端UI框架,其 ...
- js实现23种设计模式(收藏)
js实现23种设计模式 最近在学习面向对象的23种设计模式,使用java 和 javascript 实现了一遍,但是因为目前大三,还没有比较正规的大项目经验,所以学习的过程种我觉得如果没有一定的项目经 ...
- Vue处理ajax请求
Ajax请求 1>解决跨域问题 1.1前端解决.只需要在vue.config.js中增加devServer节点增加代理: const path = require("path" ...
- Spring3中好用的工具类收集
1) 请求工具类 org.springframework.web.bind.ServletRequestUtils //取请求参数的整数值: public static Integer getIntP ...
- FMDB中的数据处理
[self.db executeUpdate:@"create table test (a text, b text, c integer, d double, e double)" ...
- iOS中的数据存储方式_Preference(NSUserDefaults)
NSUserDefaults适合存储轻量级的本地数据,项目中,我会把一些简单的数据密码.网址.登陆状态BOOL.整型/浮点型数据等和用户有关的数据用它存储.但是它不能存储自定义的对象! 实例化一个 N ...
- sql 经典加强巩固练习题
由于本人需要加强巩固一下数据库知识,就搜罗了一些题目来练习,感觉不错,故分享一下资源难度层度依次上升这50道里面自认为应该没有太多错误,而且尽可能使用了最简单或是最直接的查询,有多种不相上下解法的题目 ...
- 学习笔记(五): Feature Crosses
目录 Feature Crosses Encoding Nonlinearity Kinds of feature crosses Glossay Crossing One-Hot Vectors P ...
- C/C++ 数组与指针
#include <iostream>using namespace std;int main(){ char *a[]={"ab","ccs",& ...