这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2093
郁闷啦,看见题目那么多,人就头晕。。。还好,虽然题目+代码麻烦点,但是这题的整体思路很清晰,就是求积分和A掉的题目数。然后就交给排序的函数sort或qsort了。 第一次WA了,结果是数组开小了,开100不够,开1000就AC了~~~
代码:
// Author: Tanky Woo
// HDOJ 2093
// Accepted 2093 0MS 212K 1628 B C++ Tanky Woo
// 擦,第一次哥数组开小了,只开了100,结果WA了。
#include
#include
using namespace std;
typedef struct Accepted
{
char name[11];
int ans;
int score;
}Accepted;
Accepted AC[100];
bool cmp(Accepted a, Accepted b)
{
if(a.ans > b.ans)
return 1;
else if(a.ans == b.ans)
if(a.score < b.score)
return 1;
return 0;
}
char stu_name[11];
int n, m; // n-考试题数, m-单位罚分
int main()
{
freopen("input.txt", "r", stdin);
scanf("%d %d", &n;, &m;);
int cnt = 0; // 记录人数
char tmp[8];
while(scanf("%s", AC[cnt].name) != EOF)
{
for(int i=0; i<n; ++i)
{
scanf("%s", tmp);
if(tmp[0]=='0' || tmp[0]=='-')
continue;
AC[cnt].ans++;
int j;
for(j=0; j<strlen(tmp); ++j)
if(tmp[j]=='(')
break;
int sum=0;
for(int k=0; k<j; ++k)
{
sum *= 10;
sum += tmp[k]-'0';
}
AC[cnt].score += sum;
sum = 0;
for(int k=j+1; k<strlen(tmp)-1; ++k)
{
sum *= 10;
sum += tmp[k]-'0';
}
AC[cnt].score += sum*m;
}
cnt++;
}
sort(AC, AC+cnt, cmp);
for(int i=0; i<cnt; ++i)
printf("%-10s %2d %4d\n", AC[i].name, AC[i].ans, AC[i].score);
return 0;
}