zoukankan      html  css  js  c++  java
  • CF R 209 div 2 CF359B Permutation 构造

    LINK:Permutation

    休闲一下 开了一道构造题。

    看起来毫无头绪 其实仔细观察第二个条件 0<=2k<=n.

    容易想到当n是奇数的时候 k的范围更小 再手玩一下第一个条件 容易发现 想要价值 必须使得 后面的式子 正值和负值抵消掉。

    这样每次差是偶数倍 所以只需要凑出来k就行了 而后面的式子想刚好抵消掉k如果直接使用两个数字的话构造会略显繁杂。

    考虑多个数字抵消 那么容易想到 两个相邻的数字带来的贡献为1 这样使用两个相邻的数字不断构造正数和负数抵消k即可。

    刚好这样做 k还是在合理的范围内的 对于奇数 让两边的式子自己抵消即可 可以对于右边限定负数也可以限定正数.

    const int MAXN=50010<<1;
    int n,k,top;
    int a[MAXN];
    inline void calc(int w,int x)//w个数字构成答案x.
    {
    	rep(1,w,i)
    	{
    		a[i*2]=i*2,a[i*2-1]=i*2-1;
    		if(x)swap(a[i<<1],a[i*2-1]),--x;
    	}
    }
    int main()
    {
    	//freopen("1.in","r",stdin);
    	get(n);get(k);
    	int cc=(n>>1)<<1;
    	calc(cc,k);
    	rep(1,cc*2,i)printf("%d ",a[i]);
    	if(n&1)printf("%d ",n*2-1),printf("%d ",n*2);
    	return 0;
    }
    
  • 相关阅读:
    CodeForces 58C Trees
    【转】二分匹配题集
    HDU2604 Queuing
    HDU1281 棋盘游戏
    HDU3360 National Treasures
    HDU2444 The Accomodation of Students
    HDU1498 50 years, 50 colors
    HDU1068 Girls and Boys
    【转】常用的latex宏包
    【转】网络流题集
  • 原文地址:https://www.cnblogs.com/chdy/p/12781696.html
Copyright © 2011-2022 走看看