我的思路是录入记录后,用一个r数组记录排名,冒泡排序法先排sum,再排time
代码如下:
#include <iostream>
#include <string>
using namespace std;
struct team
{
int time = 0;
int sum = 0;
int question[10] = { 0 };
};
int main()
{
int n, m, i, j, k;
cin >> n >> m;
team t[1000];
int a, b, c;
string s;
//录入
for (i = 0; i < m; i++)
{
cin >> a >> b >> c >> s;
if(s=="ac"&&t[a - 1].question[c - 1] == 0)
{
t[a - 1].time += b;
t[a - 1].question[c - 1] = 1;
t[a - 1].sum++;
}
if (t[a - 1].question[c - 1] == 0 && s == "wa")
t[a - 1].time += 20;
}
int r[1000] = { 0 };
for (i = 0; i < n; i++)
r[i] = i;
int temp;
//先从sum排
for(i=0;i<n;i++)
for (j = i + 1; j < n; j++)
{
if (t[r[i]].sum < t[r[j]].sum)
{
temp = r[i];
r[i] = r[j];
r[j] = temp;
}
}
//再从time排
for (i = 0; i < n; i++)
for (j = i + 1; j < n; j++)
{
if (t[r[i]].sum == t[r[j]].sum&&t[r[i]].time > t[r[j]].time)
{
temp = r[i];
r[i] = r[j];
r[j] = temp;
}
//sum和time都一样编号小的先排
if (t[r[i]].sum == t[r[j]].sum&&t[r[i]].time == t[r[j]].time)
if (r[i] > r[j])
{
temp = r[i];
r[i] = r[j];
r[j] = temp;
}
}
//输出
for (i = 0; i < n; i++)
{
cout << (r[i] + 1) << " " << t[r[i]].sum << " " << t[r[i]].time << endl;
}
}
用例子的数据输出是一样的,但是整进去就WA了QWQ