You are given an integer sequence |sum(A)−sum(B)| is minimum possible.
The value S.
Input
The first line of the input contains one integer 1≤n≤2⋅109).
Output
Print one integer — the minimum possible value of B.
Examples
3
0
5
1
6
1
Note
Some (not all) possible answers to examples:
In the first example you can divide the initial sequence into sets 0.
In the second example you can divide the initial sequence into sets 1.
In the third example you can divide the initial sequence into sets 1.
题意:给你一个整数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/