0
已解决
王鹤宁
中级守护
中级守护
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100010],b[100010];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=i;
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
if(a[i]<a[j])
{
int t=0;
t=a[j];
a[j]=a[i];
a[i]=t;
int h=0;
h=b[j];
b[j]=b[i];
b[i]=h;
}
}
sort(b+1,b+4);
cout<<b[1]<<' '<<b[2]<<' '<<b[3];
sort(b+n-2,b+1+n);
cout<<endl<<b[n-2]<<' '<<b[n-1]<<' '<<b[n];
return 0;
}
请丁老头帮忙看一下
王鹤宁在2019-09-22 21:02:19追加了内容
题目手滑打错了,是1167
1
已采纳
丁浩然
新手光能
新手光能
n<100000 = 10^5
你用双重循环排序 共循环了n^2=(10^5)^2=10^10>10^8 必定超时
所以你前面用结构体,就是把你的a与b数组用一个数组的不同元素来存储
就可以实现sort排序 而sort排序只需用 n log n <10^8
//结构体定义
// 这所谓的a[i].t相当于a[i], a[i].f相当于b[i] , 这样子存等会儿sort排序就可以让a[i].t与a[i].f捆绑在一起
// 结构体类型排序 按照积分升序排列
后面的话就改成a数组且输出为a[i].f
不采纳说不过去
1
董子墨
中级天翼
中级天翼
超时对吧,你这个程序的时间复杂度是O(n^2),比10^9大。
n最大都是100000,前面你别用选排,用快排,不会就用冒泡优化、插排,或更快的。
学了快排和结构体的话就用结构体,结构体里定义积分和序号,另外定义最后结果的数组,排序。如果不会写后面的函数的话,可以参考许金夫发的,或在评论里告诉我,我来发函数部分。
我用的是结构体和快排,没用别的排序,不知道会不会超时,最好用结构体。
0
0