http://acm.hdu.edu.cn/showproblem.php?pid=6098
给出一组数列,共有n个数,输出n-1个数,第i个输出的是所给数列中下标不是i的整除数中的最大的数。
模拟过程必定超时。因为是除去所有的整除数,意味着第i个数本身是不看的,那其实就很简单了,只要对整个数列倒序排序,然后每次输出的时候从大的开始遍历,判断是否能整除即可。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
struct node
{
int num;
int a;
}s[111111];
bool cmp(node x,node y)
{
return x.num>y.num;
}
int b[111111];
int main()
{
int T;
int n;
cin>>T;
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&s[i].num);
s[i].a=i;
}
sort(s+1,s+n+1,cmp);
for(int i=2;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(s[j].a%i==0)
continue;
else
{
b[i]=s[j].num;
break;
}
}
}
int p=0;
for(int i=2;i<=n;i++)
{
if(p++)
cout<<" ";
printf("%d",b[i]);
}
cout<<endl;
}
return 0;
}