本文主要是介绍2017多校6 1003 Inversion,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
这篇关于2017多校6 1003 Inversion的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!