1. 程式人生 > >#452 Div2 Problem C Dividing the numbers ( 思維 || 構造 )

#452 Div2 Problem C Dividing the numbers ( 思維 || 構造 )

tin ros family 過程 clas num microsoft splay 選擇

題意 : 將從 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 ( 思維 || 構造 )