hdu 2093 考试排名 一直wa 求形容高人指点的成语大神指点

HDU 2093 考试排名
HDU 2093 考试排名
编辑:www.fx114.net
本篇文章主要介绍了"HDU 2093 考试排名 ",主要涉及到HDU 2093 考试排名 方面的内容,对于HDU 2093 考试排名 感兴趣的同学可以参考一下。
1 #include &stdio.h& 2 #include &string.h& 3 #include &stdlib.h& 4 struct student 5 { 6
char name[15]; 7
int s,t; 8 }a[1000]; 9 char s1[15];10 int n=0,m,11 int cmp(const void *a,const void *b)12 {13
student *a1=(student*)a;14
student *b1=(student*)b;15
if (a1-&s != b1-&s) return b1-&s - a1-&s;16
if (a1-&t != b1-&t) return a1-&t - b1-&t;17
return strcmp(a1-&name,b1-&name);18 }19 int time(char *s)20 {21
int t1=0,i,j,t2=0;22
for (i=0;s[i]!='(' && s[i];i++) t1=t1*10+s[i]-'0';23
if(s[i]) for (j=i+1;s[j]!=')';j++) t2=t2*10+s[j]-'0';24
return t1+t2*25 }26 int main()27 {28
scanf("%d%d",&m,&tt);29
while (scanf("%s",&a[++n].name)!=EOF)30
a[n].s=a[n].t=0;32
for (int i=1;i&=m;i++)33
scanf("%s",s1);35
if (s1[0]=='0' || s1[0]=='-') continue;36
a[n].s++;37
a[n].t+=time(s1);38
qsort(a+1,n,sizeof(a[0]),cmp);42
for (int i=1;i&=n;i++) printf("%-10s %2d %4d\n",a[i].name,a[i].s,a[i].t);43
return 0;44 }
本站评论功能暂时取消,后续此功能例行通知。
本文标题:
本页链接:& & 题目:& & 考试排名& & Time Limit:
MS (Java/Others)&&&Memory Limit:
K (Java/Others)& & Total Submission(s): 5525&&&Accepted Submission(s): 1935&nb……
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
论文写作技巧
上一篇:下一篇:
相关经验教程关于hdu2093我的计算结果为何总是相差了1? - 知乎2被浏览74分享邀请回答int pow(int x,int n)
int ans = 1;
while(n--)
return ans;
&cmath&中给出的函数原型是double pow( double x, double y ),传入int类型在运算中会产生精度的缺失。改了之后可以过样例,交了一发之后发现WA了,题主再多试几组测试下吧,祝好。13 条评论分享收藏感谢收起与世界分享知识、经验和见解HDUOJ(298)
ACM_字符串(33)
Time Limit:
MS (Java/Others)&&&&Memory Limit:
K (Java/Others)
Total Submission(s): 12212&&&&Accepted Submission(s): 4323
Problem Description
C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点。它的功能是怎么实现的呢?
我们做好了题目的解答,提交之后,要么“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
输入数据的第一行是考试题数n(1≤n≤12)以及单位罚分数m(10≤m≤20),每行数据描述一个学生的用户名(不多于10个字符的字串)以及对所有n道题的答题现状,其描述采用问题描述中的数量标记的格式,见上面的表格,提交次数总是小于100,AC所耗时间总是小于1000。
将这些学生的考试现状,输出一个实时排名。实时排名显然先按AC题数的多少排,多的在前,再按时间分的多少排,少的在前,如果凑巧前两者都相等,则按名字的字典序排,小的在前。每个学生占一行,输出名字(10个字符宽),做出的题数(2个字符宽,右对齐)和时间分(4个字符宽,右对齐)。名字、题数和时间分相互之间有一个空格。
Sample Input
-1 -16 8 0 0 120 39 0
116 -2 11 0 0 82 55(1) 0
72(3) 126 10 -3 0 47 21(2) -2
0 -1 -8 0 0 0 0 0
-2 67(2) 13 -1 0 133 79(1) -1
0 0 57(5) 0 0 168 -7 0
Sample Output
题解:处理数据有点麻烦....仿ACM实时榜单....
#include&iostream&
#include&memory.h&
#include&cstdlib&
#include&cstdio&
#include&cmath&
#include&cstring&
#include&string&
#include&cstdlib&
#include&iomanip&
#include&algorithm&
typedef long long LL;
#define M 100000
int a[M],c[M];
char b[M][11];
void JH(int e)
swap(a[e],a[e+1]);
swap(c[e],c[e+1]);
/*char g[11];
strcpy(g,b[e]);
strcpy(b[e],b[e+1]);
strcpy(b[e+1],g);
swap(b[e],b[e+1]);
int main()
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
scanf(&%d%d&,&n,&m);
getchar();
int i=0,x;
while(scanf(&%s&,&b[i])!=EOF)
for(int j=0;j&n;j++)
scanf(&%d&,&x);
//getchar();
scanf(&%c&,&h);
if(h=='(')
scanf(&%d&,&x);
c[i]+=m*x;
scanf(&%c&,&h);
for(int w=1;w&i;++w)
for(int e=0;e&i-w;e++)
if(a[e]&a[e+1])
if(a[e]==a[e+1])
if(c[e]&c[e+1])
if(c[e]==c[e+1])
if(strcmp(b[e],b[e+1])&0)
for(int j=0;j&i;j++)
printf(&%-10s %2d %4d\n&,b[j],a[j],c[j]);
AC:利用结构体
#include&iostream&
#include&memory.h&
#include&cstdlib&
#include&cstdio&
#include&cmath&
#include&cstring&
#include&string&
#include&cstdlib&
#include&iomanip&
#include&algorithm&
typedef long long LL;
struct student
char name[10];
int solved[13];
int main()
cin&&n&&m;
char b[10];
student a[1000];
while(cin&&b)
strcpy(a[k].name,b);
a[k].sum=0;
a[k].temp=0;
for(int i=0;i&n;i++)
cin&&a[k].solved[i];
if(a[k].solved[i]&0)
a[k].temp+=a[k].solved[i];
a[k].sum++;
if(getchar()=='(')
a[k].temp+=x*m;
getchar();
for(int i=0;i&k;i++)
for(int j=0;j&k-i-1;j++)
if(a[j].sum&a[j+1].sum)
b=a[j],a[j]=a[j+1],a[j+1]=b;
if(a[j].sum==a[j+1].sum)
if(a[j].temp&a[j+1].temp)
b=a[j],a[j]=a[j+1],a[j+1]=b;
else if(a[j].temp==a[j+1].temp)
if(a[j].name&a[j+1].name)
b=a[j],a[j]=a[j+1],a[j+1]=b;
printf(&%-10s %2d %4d\n&,a[i].name,a[i].sum,a[i].temp);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:412475次
积分:14800
积分:14800
排名:第734名
原创:995篇
评论:96条
阅读:1284
(6)(24)(16)(29)(24)(13)(4)(26)(15)(101)(45)(61)(64)(38)(144)(221)(116)(5)(59)

我要回帖

更多关于 hdu2093 的文章

 

随机推荐