HDOJ 2093 考试排名(表格,字符串)
来源:互联网 发布:阿里云api接口 编辑:程序博客网 时间:2024/05/20 16:11
HDOJ 2093
这是一道字符串处理的题目。题目本身没有太高深的算法,只是以表格的形式处理很麻烦。比如出现的116(5),括号的读入和处理。
看着解题报告完成的,收获了很多。
第一,STL中的sort排序,自己定义了排序规则cmp函数,可以按照题目的要求进行排序。
第二,这里用到了sscanf的读取的一个技巧。认真分析这里的sscanf的使用。
sscanf的用法:
a.本题:
sscanf(s,”%d(%d)”,&x,&y); //从字符串中读取出x,y.
b.将字符读入到字符串中
sscanf(“12345”,”%s”,str);
printf(“用法三\nstr = %s\n”,str);
则 str=12345
第三,用结构体解决类似问题,很明显的面向对象的思想。
第四,不要害怕一道题,这题目上次遇见时看都不想看,实际上静下心来看不是很困难。
对了还有一个地方要说明一下,就是解决带有括号的那个地方。下面有一行代码是:
if(s[1]=='('||strlen(s)>=5)
刚开始没看懂原作者的意图,后来觉得大概是他假设如果此题在AC但是有错误提交的情况下,如果提交的时间在1-9之间,那么s[1]就存储的应该是‘(’,如果提交的时间10-1000的话,那么比如20(3),字符串的长度至少大于等于5.所以strlen(s)>=5.
sscanf的使用技巧:http://blog.csdn.net/sjf0115/article/details/8579935
#include <stdio.h>#include <math.h>#include <stdlib.h>#include <string.h>#include <string>#include <algorithm>#include <iostream>#include <ctype.h>#include <set>#include <map>#include <vector>using namespace std;struct Stu{ int acnum,time; char name[10];};int n,m,i,num,wa,ac,x,y;Stu data[100000];char s[20];bool pd;bool cmp(Stu x,Stu y){ if(x.acnum >y.acnum) return true; if(x.acnum ==y.acnum &&x.time <y.time ) return true; if(x.acnum ==y.acnum &&x.time ==y.time &&strcmp(x.name ,y.name)<=0 ) return true; return false;}int main(){ cin>>n>>m; //考试题目数和罚时分 num=1; while(scanf("%s",data[num].name )!=EOF){ data[num].acnum=0;data[num].time=0;wa=0;ac=0; //初始化 for(i=1;i<=n;i++){ memset(s,'\0',sizeof(s)); pd=false; scanf("%s",s); if(s[0]=='-'||s[0]=='0'){ //没有AC pd=true; } if(s[1]=='('||strlen(s)>=5){ //AC了,但是有错误提交 pd=true; ++ac; sscanf(s,"%d(%d)",&x,&y); //从字符串中读取出x,y.sscanf的一个重要用法 data[num].time+=x; wa+=y; } if(pd==false){ //AC且没有错误提交 ++ac; sscanf(s,"%d",&x); data[num].time +=x; } } data[num].time +=wa*m;//加上罚时 if(data[num].time<0) { data[num].time =0; } data[num].acnum =ac; ++num; //记录下一个选手 } sort(data+1,data+num,cmp); //自定义sort的排序规则 for(i=1;i<=num-1;i++){ printf("%-10s %2d %4d\n",data[i].name ,data[i].acnum ,data[i].time );//输出名字(10个字符宽),做出的题数(2个字符宽,右对齐)和时间分(4个字符宽,右对齐)。名字、题数和时间分相互之间有一个空格。 } return 0;}
阅读全文
0 0
- HDOJ 2093 考试排名(表格,字符串)
- hdoj 2093 考试排名
- HDOJ 2093 考试排名
- hdoj 2093 考试排名
- HDOJ 2093 考试排名
- [字符串][第二阶段-字符串处理][HDOJ-2093]考试排名
- [字符串][第二阶段-字符串处理][HDOJ-2093]考试排名
- hdoj.2093 考试排名 20140806
- Hdu 2093 考试排名【字符串】
- HDOJ-考试排名
- HDOJ---ACMSteps---1.3.5考试排名
- 2093考试排名
- hdu 2093 考试排名
- HDU 2093 - 考试排名
- HDU 2093 考试排名
- HDU 2093 考试排名
- hdu 2093 考试排名
- HDU 2093 考试排名
- Windows 和 android 平台Boost编译方法
- LinkedList
- ubuntu16.04编译boost for Android
- Javascript创建对象
- Websocket原理
- HDOJ 2093 考试排名(表格,字符串)
- C#中的委托、lamba与Func Action的使用
- C语言IO操作
- Java的主要就业方向
- 自定义View——设计规则图形及其属性
- 将一个类(或Fragment)中的数据传递给另一个activity(或Fragment)
- 工厂设计模式
- 基于TensorFlow微调AlexNet
- LCA 最近公共祖先