问题标题: 酷町堂:1168 @丁浩然

0
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
黄子澄
黄子澄
中级天翼
中级天翼

我们班的作业,我正在想.......

我要回答