多校6 HDU-6098 Inversion 水题以及神奇的代码操作

原题链接:
HDU-6098

大意:给一个串,然后生成另一个串,生成规则是(i>=2):

Bi=maxijAj

限制没啥特殊的,nlogn算法

思路:
暴力瞎搞即可。
排序 从后往前找 找到就 break

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mem(s,t) memset(s,t,sizeof(s))
#define D(v) cout<<#v<<" "<<v<<endl
#define inf 0x3f3f3f3f
//#define LOCAL
inline void read(int &x){
    x=0;char p=getchar();
    while(!(p<='9'&&p>='0'))p=getchar();
    while(p<='9'&&p>='0')x*=10,x+=p-48,p=getchar();
}
const int MAXN=100000+10;
int a[MAXN],id[MAXN];
bool cmp(int x,int y){return a[x]>a[y];}
int main() {
#ifdef LOCAL
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
#endif
    int t;
    read(t);
    while(t--){
        int n;
        read(n);
        for(int i=1;i<=n;i++){
            read(a[i]);
            id[i]=i;
        }
        //sort(id+1,id+n+1,[&](int x,int y){return a[x]>a[y];});
        sort(id+1,id+n+1,cmp);
        int f=1;
        for(int i=2;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(id[j]%i){
                    if(f) printf("%d",a[id[j]]),f=0;
                    else printf(" %d",a[id[j]]);
                    break;
                }
            }
        }
        puts("");
    }
    return 0;
}

从标程学到两个神奇的东西 一个是 C++11 特性。

sort(id+1,id+n+1,[&](int x,int y){return a[x]>a[y];});

还有一个是神奇的 printf
非行末输出空格,否则换行。学习一个。

printf("%d%c",f," \n"[i==n]);

[i==n] 本身是判断条件 其值为 0 或 1 刚好对应 ” \n” 的下标 映射到 %c 产生奇妙的效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值