Блог пользователя pop1912

Автор pop1912, история, 4 года назад, По-английски

Hi, Can you help me in this CSES Two Sets problem?.

Statement:

Your task is to divide the numbers 1,2,…,n into two sets of equal sum.

Input

The only input line contains an integer n.

Output

Print "YES", if the division is possible, and "NO" otherwise.

After this, if the division is possible, print an example of how to create the sets. First, print the number of elements in the first set followed by the elements themselves in a separate line, and then, print the second set in a similar way.

Constraints 1≤n≤106

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
17 месяцев назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

To be able to divide the set into two different sets of equal sum, n must be of the form 4k or 4k+3,

case [i] -> n = 4k put first n/4 numbers and last n/4 in first set, and remaining n/2 numbers in second set, for eg, n= 8 {1,2,7,8}, {3,4,5,6}

case [ii] -> n = 4k + 3

observation- 4n 4n+1 4n+2 4n+3, then 4n + 4n+3 == 4n + 1 + 4n + 2, therefore make partition accordingly.

»
6 месяцев назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

You can initialise a matrix (let's say dp) where (i,j) element stores the number of ways of making the sum j using values from 1 to i. Then our relation becomes dp[i][j]=dp[i-1][j]+dp[i-1][j-i]. Of course, provided j>i.

Here's the code just in case:

https://cses.fi/paste/d377beb47794981f91183b/

Hope it helps :)