C. Dividing the numbers

Petya has n integers: 1, 2, 3, ..., n. He wants to split these integers in two non-empty groups in such a way that the absolute difference of sums of integers in each group is as small as possible.

Help Petya to split the integers. Each of n integers should be exactly in one group.

Input

The first line contains a single integer n (2 ≤ n ≤ 60 000) — the number of integers Petya has.

Output

Print the smallest possible absolute difference in the first line.

In the second line print the size of the first group, followed by the integers in that group. You can print these integers in arbitrary order. If there are multiple answers, print any of them.

 

input

4

output

0
2 1 4

input

2

output

1
1 1

Note

In the first example you have to put integers 1 and 4 in the first group, and 2 and 3 in the second. This way the sum in each group is 5, and the absolute difference is 0.

In the second example there are only two integers, and since both groups should be non-empty, you have to put one integer in the first group and one in the second. This way the absolute difference of sums of integers in each group is 1.

这场B C过的人数差不多,可是B死于平年的2月写成29天,挣扎N次才发现2333.....

C题用头铁方式过,一点AC乐趣都没- -

题目大意:

1~n个数划分为两个非空集合,求两个集合各自和的差值的最小值.

解题思路:

思路1:

如1 2 3 4 5 6,显然(1,6)和(2,5)能抵消,"3","4"两集合各一个恰好差值为1.显然遵照这个思路,差值最小值不是0就是1。通过不断一对对互相消去,再判断互相消去的对数奇偶来

得出为0还是1.  当差值为1时候按从前往后,从后往前各自输出(i+=2)能抵消对数个数,再讲正中央数字直接输出即可。

而当n为奇数时,我将 (1, 2),(3)提前抵消,剩下的数遵照上面思路继续下去就是了。

由于都只是if else的判断,所以复杂度极低- -

AC(头铁)代码:

#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
#include <string>
#include <ctype.h>
//******************************************************
#define lrt (rt*2)
#define rrt (rt*2+1)
#define LL long long
#define inf 0x3f3f3f3f
#define pi acos(-1.0)
#define exp 1e-8
//***************************************************
#define eps 1e-8
#define inf 0x3f3f3f3f
#define INF 2e18
#define LL long long
#define ULL unsigned long long
#define PI acos(-1.0)
#define pb push_back
#define mk make_pair #define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define SQR(a) ((a)*(a))
#define Unique(a) sort(all(a)),a.erase(unique(all(a)),a.end())
#define min3(a,b,c) min(a,min(b,c))
#define max3(a,b,c) max(a,max(b,c))
#define min4(a,b,c,d) min(min(a,b),min(c,d))
#define max4(a,b,c,d) max(max(a,b),max(c,d))
#define max5(a,b,c,d,e) max(max3(a,b,c),max(d,e))
#define min5(a,b,c,d,e) min(min3(a,b,c),min(d,e))
#define Iterator(a) __typeof__(a.begin())
#define rIterator(a) __typeof__(a.rbegin())
#define FastRead ios_base::sync_with_stdio(0);cin.tie(0)
#define CasePrint pc('C'); pc('a'); pc('s'); pc('e'); pc(' '); write(qq++,false); pc(':'); pc(' ')
#define vi vector <int>
#define vL vector <LL>
#define For(I,A,B) for(int I = (A); I < (B); ++I)
#define FOR(I,A,B) for(int I = (A); I <= (B); ++I)
#define rFor(I,A,B) for(int I = (A); I >= (B); --I)
#define Rep(I,N) For(I,0,N)
#define REP(I,N) FOR(I,1,N)
using namespace std;
const int maxn=2e5+;
vector<int>Q[maxn];
int main()
{
int n,ans,num;
while(cin>>num)
{
if(num==)
{
puts(""); printf("1 1");
}
if(num%==&&num>)
{
n=num/;
if(n%==)
{
puts("");
printf("%d",n);
n/=;ans=;
for(int i=;i<=num&&n;i+=)
{
ans++;
printf(" %d",i);
if(ans==n) break;
}
ans=;
for(int i=num;n;i-=)
{
ans++;
printf(" %d",i);
if(ans==n) break;
}
}
else
{
puts("");
printf("%d",n);
n/=;ans=;
for(int i=;i<=num;i+=)
{
ans++;
printf(" %d",i);
if(ans==n) break;
}
ans=;
for(int i=num;;i-=)
{
ans++;
printf(" %d",i);
if(ans==n) break;
}
printf(" %d",num/);
}
}
else if(num%==&&num>)
{ // 5 9
n=(num-)/;
if(n%==)
{
puts("");
printf("%d",n+);
printf("");
n/=;ans=;
for(int i=;i<=num&&n;i+=)
{
ans++;
printf(" %d",i);
if(ans==n) break;
}
ans=;
for(int i=num;n;i-=)
{
ans++;
printf(" %d",i);
if(ans==n) break;
}
}
else
{ // 1 3
puts("");
printf("%d",n+);
printf("");
n/=;ans=;
for(int i=;i<=num&&n;i+=)
{
ans++;
printf(" %d",i);
if(ans==n) break;
}
ans=;
for(int i=num;n;i-=)
{
ans++;
printf(" %d",i);
if(ans==n) break;
}
printf(" %d",(+num)/);
}
}
cout<<endl;
}
return ;
}

思路2:

求出n个数和,直接判断奇偶,得出差值为1还是0,然后除以2得出每个集合的sum应该凑到多少。

n个数两个集合必定分别为m,m+1个数字,或者分别为m,m个数,所以用sum/m得到平均值ave,然后讲ave前后的数字对分别输出,输出m/2对的数即可.

或者用sum%(m+1)后,其他数输出为(1,n),(2,n-1)这样的数字对即可,感觉这个思路复杂度更低,AC代码就是这个思路- -

AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[60000];
int main()
{
int n, sum, p, s=0, q;
scanf("%d",&n);
if(n%2==0) sum=n/2*(n+1);
else sum=(n+1)/2*n;
if(sum%2==0) printf("0\n");
else printf("1\n");
p=sum/2;q=p%(n+1);
if(q!=0) a[s++]=q;
p-=q;
for(int i=1; i<=n&&p!=0; i++)
{
if(i!=q&&(n+1-i)!=q)
{
a[s++]=i;
a[s++]=n+1-i;
p-=n+1;
}
}
printf("%d", s);
for(int i=0; i<s; i++)
printf(" %d", a[i]);
printf("\n");
return 0;
}

Codeforces Round #452 (Div. 2) C. Dividing the numbers(水)的更多相关文章

  1. Codeforces Round #358 (Div. 2) A. Alyona and Numbers 水题

    A. Alyona and Numbers 题目连接: http://www.codeforces.com/contest/682/problem/A Description After finish ...

  2. Codeforces Round #452 (Div. 2) A B C

    Codeforces Round #452 (Div. 2) A Splitting in Teams 题目链接: http://codeforces.com/contest/899/problem/ ...

  3. Codeforces Round #452 (Div. 2) 899E E. Segments Removal

    题 OvO http://codeforces.com/contest/899/problem/E Codeforces Round #452 (Div. 2) - e 899E 解 用两个并查集(记 ...

  4. Codeforces Round #297 (Div. 2)A. Vitaliy and Pie 水题

    Codeforces Round #297 (Div. 2)A. Vitaliy and Pie Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: xxx  ...

  5. Codeforces Round #396 (Div. 2) A B C D 水 trick dp 并查集

    A. Mahmoud and Longest Uncommon Subsequence time limit per test 2 seconds memory limit per test 256 ...

  6. Codeforces Round #452 (Div. 2)-899A.Splitting in Teams 899B.Months and Years 899C.Dividing the numbers(规律题)

    A. Splitting in Teams time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. 【Codeforces Round #452 (Div. 2) C】 Dividing the numbers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] n为偶数. l = 1, r = n (l,r)放在一组 l++,r-- 新的l,r放在另外一组 直到l+1==r 这个时候,判断两 ...

  8. Codeforces Round #360 (Div. 1) D. Dividing Kingdom II 暴力并查集

    D. Dividing Kingdom II 题目连接: http://www.codeforces.com/contest/687/problem/D Description Long time a ...

  9. Codeforces Round #360 (Div. 1) D. Dividing Kingdom II 并查集求奇偶元环

    D. Dividing Kingdom II   Long time ago, there was a great kingdom and it was being ruled by The Grea ...

随机推荐

  1. PID算法(C语言)

    /************ PID算法(C语言) ************/ #include <stdio.h> #include<math.h> struct _pid { ...

  2. [Usaco2009 Dec]Toll 过路费

    题面: 跟所有人一样,农夫约翰以着宁教我负天下牛,休教天下牛负我(原文:宁我负人,休教人负我)的伟大精神,日日夜夜苦思生财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走, ...

  3. Telnet 协议详解

    Telnet 协议详解 一.概述 ============================================================ Telnet 协议是 TCP/IP 协议族中 ...

  4. "UX"将会是下一个Buzzword?

    “用户体验非常重要”.“没有用户体验就没有产品”.“UX就是一切”.不知道从何时开始,用户体验(UX) 这个名词已经变得如此多见了,但是人们真正的认识.认清了什么是用户体验了吗?设计师们常挂在嘴边的用 ...

  5. android通过 Intent 传递类对象

    Android中Intent传递类对象提供了两种方式一种是 通过实现Serializable接口传递对象,一种是通过实现Parcelable接口传递对象. 要求被传递的对象必须实现上述2种接口中的一种 ...

  6. Remove duplicates

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  7. 设定Word段落的背景色

    段落背景不同于文字区别.很多新接触word的朋友都找不到怎么弄. 先把光标停留在需要设置的段落文字上,或者选择需要设置的段落文字. 点击段落里的边框和底纹,如图 在弹出框中选择底纹. 选择需要填充的颜 ...

  8. python私有公有属性

    python中,类内方法外的变量叫属性,类内方法内的变量叫字段.他们的私有公有访问方法类似. class C: __name="私有属性" def func(self): prin ...

  9. Caused by: Unable to load configuration. - action - file:/C:/apache-tomcat-7.0.70/webapps/Structs/WEB-INF/classes/struts.xml:7:72 at com.opensymphony.xwork2.config.ConfigurationManager.getConfigurati

    Unable to load configuration. - action - file:/C:/apache-tomcat-7.0.70/webapps/Structs/WEB-INF/class ...

  10. Spring3.x错误---- Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.

    Spring3.x错误: 解决方法: 缺少cglib的包, 下载地址: http://sourceforge.net/projects/cglib/files/latest/download?sour ...