#452 Div2 Problem C Dividing the numbers ( 思维 || 构造 )

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#452 Div2 Problem C Dividing the numbers ( 思维 || 构造 )相关的知识,希望对你有一定的参考价值。

题意 : 将从 1 ~ n 的数分成两组,要求两组和的差值尽可能小,并输出其中一组的具体选数情况

 

分析 : 如果将这 n 个数从大到小四个一组来进行选择的话那么差值就为 0 ,然后再来考虑 n%4 != 0 的情况。举个例子就是 n = 9 的时候,我们考虑 6 7 8 9 ,将6、9放入一组,7、8放入第二组,那么此时差值就会为 0 ,接下来再对 2 3 4 5 进行同样的取法此时差值仍为 0 ,最后剩下一个 1 ,很显然最后的最小差值应当为 1 。其实综合考虑一下 n%4 != 0 的情况只有 4 种,只有 n%3==3 or 0 的时候差值才能为 0 否则为 1,接下来只要模拟取的过程即可。

 

技术分享图片
#include<bits/stdc++.h>
using namespace std;

int main(void)
{
    int n;
    while(~scanf("%d", &n)){
        if(n==3){
            puts("0\n1 3");
            continue;
        }

        if(n%4==0 || n%4==3) puts("0");
        else puts("1");

        int num = n/4 * 2 + (n%4!=0);
        printf("%d ", num);

        for(int i=n; i>=4; i-=4)
            printf("%d %d ", i, i-3);
        if(n%4==3) puts("3");
        else if(n%4==2 || n%4==1) puts("1");
        else puts("");
    }

    return 0;
}
View Code

 

以上是关于#452 Div2 Problem C Dividing the numbers ( 思维 || 构造 )的主要内容,如果未能解决你的问题,请参考以下文章

#417 Div2 Problem C Sagheer and Nubian Market (二分 && std::accumulate)

#415 Div2 Problem C Do you want a data? (math && 前后缀和 && 快速幂)

div2 .c

div2.B C

CODEFORCE ROUND #625 DIV2

jquery选择器的使用方法