Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
134851 | YYYY | 学生排队 | C++ | 运行超时 | 60 | 1000 MS | 1408 KB | 1092 | 2024-03-03 10:07:40 |
#include<iostream> using namespace std; int n; struct S{ int num; int time; int noh; }stu[100001]; /* 优化冒泡排序,小-》大 优化点:如果数组已经有序,可无须判断,直接输出 */ void betterbubblesort() { bool flag = false; //数组初始化无序 for (int i = n; i >= 2; i--) { //从前往后冒泡,将最大值移到最后,无序才继续 flag = true; //做个标记,如果该标记被破坏则说明数组无序 for (int j = 1; j < i; j++) { if (stu[j].num > stu[j+1].num) { stu[j].time++; stu[j].noh += stu[j].time; stu[j+1].time++; stu[j+1].noh += stu[j+1].time; swap(stu[j],stu[j+1]); flag = false; } } if(flag == true){ break; } } } int main(){ cin >> n; for(int i = 1;i <= n;i++){ cin >> stu[i].num; } long long re = 0; betterbubblesort(); for(int i = 1;i <= n;i++){ re += stu[i].noh; } cout << re; return 0; }