3641 整數劃分(構造)

2021-08-28 15:10:08 字數 823 閱讀 4374

試將 1 到 n 這 n 個正整數分成三份,使得這三份的和相等。

輸入乙個正整數 n (1≤n≤2⋅105)。

輸出 n 個正整數 k1,k2,…,kn (1≤ki≤3),用空格隔開。ki 表示要把 i 這個整數分在第幾組。

如果有多解輸出任意一解。如果無解輸出impossible

input

6
output

3 2 1 1 2 3
input

5
output

1 2 2 1 3
input

7
output

impossible
題目大概:

1到n這n個整數,問能否分成相等三部分,如果能,那麼就輸出它輸入那個集合。

思路:構造題,可以看出六個連續的數可以構成一組,能組成相等的三個整數。

然後手動構造出小樣例,大樣例都是小樣例加多個6.

**:

#include using namespace std;

#define ll long long

const int maxn=2e5+100;

int vis[maxn];

int main()

int st;

if((n-5)%6==0)

}if((n-6)%6==0)

}if((n-8)%6==0)

}if((n-9)%6==0)

}for(int i=1; i<=n; i++)

return 0;

}

整數劃分(劃分dp)總結

寫了幾個題發現整數劃分是一類題,而不是一道題。具體題型 1 n相同元素放入m個相同的盤子 盤子允許為空 例題 放蘋果 poj 1664設dp i j 為 j 個元素放入i個盤子轉移方程 dp i j dp i 1 j 新新增乙個盤子,盤子為空 dp i j dp i j i i個盤子 各取出乙個 2...

整數劃分問題

整數劃分問題是乙個經典問題,幾乎在講演算法設計的書中都會講,下面把主要的思想給總結下。所謂整數劃分,就是將乙個正整數n劃分為一系列的正整數之和,如將n可以劃分為 1 我們該如何找出所有的劃分呢?我們可以先來看看整數劃分的規律 譬如正整數 6 劃分情況如下 6 5 14 2 4 1 1 3 3 3 2...

整數劃分問題

給定乙個自然數,分成k部分,a1,a2.的數的和,要求a1 a2.求有多少種?原理 整數n拆分成最多不超過m個數的和的拆分數,和n 拆分成最大不超過m的拆分數相等。根據這個原理,原問題就轉化成了求最大拆分為k的拆分個數與最大拆分為k 1的拆分個數的差 f n,k f n,k 1 f n k,k 如下...