2017多校6 1003 Inversion

来源:互联网 发布:柯洁评论黑嘉嘉 知乎 编辑:程序博客网 时间:2024/05/18 13:25

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;}


原创粉丝点击