1. 程式人生 > >Integer Sequence Dividing CodeForces - 1102A (規律)

Integer Sequence Dividing CodeForces - 1102A (規律)

pac pan n) ide example font n-2 end else

You are given an integer sequence 1,2,,n1,2,…,n. You have to divide it into two sets AAand BB in such a way that each element belongs to exactly one set and |sum(A)sum(B)||sum(A)−sum(B)| is minimum possible.

The value |x||x| is the absolute value of xx and sum(S)sum(S) is the sum of elements of the set

SS.

Input

The first line of the input contains one integer nn (1n21091≤n≤2⋅109).

Output

Print one integer — the minimum possible value of |sum(A)sum(B)||sum(A)−sum(B)| if you divide the initial sequence 1,2,,n1,2,…,n into two sets AA and B

B.

Examples

Input
3
Output
0
Input
5
Output
1
Input
6
Output
1

Note

Some (not all) possible answers to examples:

In the first example you can divide the initial sequence into sets A={1,2}A={1,2} and B={3}B={3} so the answer is 00.

In the second example you can divide the initial sequence into sets

A={1,3,4}A={1,3,4} and B={2,5}B={2,5} so the answer is 11.

In the third example you can divide the initial sequence into sets A={1,4,5}A={1,4,5} and B={2,3,6}B={2,3,6} so the answer is 11.

題意:給你一個整數N,讓你將1~N這N個整數分成兩個集合,

問這兩個集合的元素數值和的差最小能是多少。

思路:

先寫幾個樣例來看下。

當N=3,

1,2,3 可以把1和2分到一個集合,3分到另一個集合。這樣差為0

當N=4

1,2,3,4可以把 1和4分到一個集合,2和3在另一個集合,這樣差為0

當N=5

1,2,3,4,5,可以分成這樣{1,3,4},{2,5} 差為1

我們在算下這三個樣例的所有元素和

N=3 ,sum=6

N=4,sum=10

N=5,sum=15

規律就可以看出來了,當1~N的和為偶數的時候,一定可以分成兩個相同的sum的集合

為奇數可以分成相差為1的兩個集合。

那麽就根據規律來寫程序了。

我的AC代碼:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), ‘\0‘, sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define gg(x) getInt(&x)
using namespace std;
typedef long long ll;
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
ll n;
int main()
{
    cin>>n;
    ll ans=(n*(1+n))/2ll;
    if(ans&1)
    {
        cout<<1<<endl;
    }else
    {
        cout<<0<<endl;
    }
    return 0;
}

inline void getInt(int* p) {
    char ch;
    do {
        ch = getchar();
    } while (ch ==   || ch == \n);
    if (ch == -) {
        *p = -(getchar() - 0);
        while ((ch = getchar()) >= 0 && ch <= 9) {
            *p = *p * 10 - ch + 0;
        }
    }
    else {
        *p = ch - 0;
        while ((ch = getchar()) >= 0 && ch <= 9) {
            *p = *p * 10 + ch - 0;
        }
    }
}

MY BLOG:
https://www.cnblogs.com/qieqiemin/

Integer Sequence Dividing CodeForces - 1102A (規律)