K - Perpetuum Mobile

来源:互联网 发布:centos 6.4 厂家 编辑:程序博客网 时间:2024/06/16 13:05

题目读懂了+想到逆序对  就很容易了 不然还是挺麻烦的

题中要产生K能量对应的隐含条件就是  有K对逆序对  (自己画图)



#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <map>#include <set>#include <vector>using namespace std;int tm[200000+5];int vis[200000+5]; int main(){int n;__int64 k;           //注意要int64scanf("%d%I64d",&n,&k);int ok=0;int i;for (i=n;i>=1;i--){if (k>=i-1)    {k-=(i-1);      //去掉tm[++ok]=i;//存下来vis[i]=1;//标记}if (k==0)break;    //完成}int line=0; //控制格式for (i=1;i<=ok;i++)//先输出 产生高能量{if (line!=0) printf(" ");printf("%d",tm[i]);line=1;}for (i=1;i<=n;i++)//因为能量已够,剩下的升序输出,代表不产生能量{if (vis[i]==0){if (line!=0) printf(" ");printf("%d",i);}line=1;}cout<<endl;return 0;} 



0 0
原创粉丝点击