#452 Div2 Problem C Dividing the numbers ( 思維 || 構造 )
阿新 • • 發佈:2017-12-24
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(View Code"%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; }
#452 Div2 Problem C Dividing the numbers ( 思維 || 構造 )