time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given an integer sequence 1,2,…,n1,2,…,n. You have to divide it into two sets AA and 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 (1≤n≤2⋅1091≤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 AAand BB.
Examples
input
Copy
3
output
Copy
0
input
Copy
5
output
Copy
1
input
Copy
6
output
Copy
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中任意挑选数使其分成两部分,输出两部分的和的差值最小是多少。找规律能发现答案是0 0 1 1 0 0 1 1循环
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int a;
scanf("%d", &a);
if (a % 4 == 3 || a % 4 == 0)
{
printf("0\n");
}
else
{
printf("1\n");
}
return 0;
}