传送门:http://codeforces.com/contest/899/problem/C

本题是一个数学问题——集合划分。

将集合{1,2,...,n}划分成两个集合,使得两个集合的元素之和的绝对差值最小。

首先,考虑最简单的操作:

第1步:将元素1和n置入集合A

第2步:将元素2和n-1置入集合B

第3步:将元素3和n-2置入集合A

……

i步:将元素in+1-i,当i为奇数时置入集合A,偶数时置入集合B

……

n/2步:将元素n/2和n/2+1置入集合B

如此,集合A中的元素之和与集合B中的元素之和相等,绝对差为0。

为保证第n/2步将元素置入集合B,则应保证n是4的整数倍。

于是,若n是4的整数倍,则划分的最小绝对差为0,集合A={1,n,3,n-2,...,n/2-1,n/2+2},集合B={2,n-1,4,n-3,...,n/2,n/2+1}。

n不可被4整除,则可以考虑预处理{1,2,...,n}的前若干项构成的集合{1,2,...,x},之后再处理集合{x+1,...,n}。当然,为了使得集合{x+1,...,n}易于处理,应保证其项数n-x是4的整数倍。于是,x可以取n%4。

以下是按照x值分类的预处理过程:

①若x=1,则预处理{1}:将1置入集合A,此时最小绝对差为1;

②若x=2,则预处理{1,2}:将1置入集合A,2置入集合B,此时最小绝对差为1;

③若x=3,则预处理{1,2,3}:将1和2置入集合A,3置入集合B,此时最小绝对差为0。

之后,{x+1,...,n}的处理过程类似于最初提及的操作——可将集合{x+1,...,n}看作{1,...,n-x}中的每一个元素增加x得到的集合,其中n-x是4的整数倍。

参考程序如下:

#include <stdio.h>
#define MAX_N 30010 int a[MAX_N]; int main(void)
{
int n;
scanf("%d", &n);
int x = n % ;
int cnt = ;
int dif;
if (x == ) dif = ;
else if (x == ) {
dif = ;
a[cnt++] = ;
}
else if (x == ) {
dif = ;
a[cnt++] = ;
}
else if (x == ) {
dif = ;
a[cnt++] = ;
a[cnt++] = ;
}
for (int i = x + ; i <= x + (n - x) / ; i += ) {
a[cnt++] = i;
a[cnt++] = n + x + - i;
}
printf("%d\n%d", dif, cnt);
for (int i = ; i < cnt; i++)
printf(" %d", a[i]);
return ;
}

最新文章

  1. linux 几个控制流语句的格式例子(if语句)
  2. Database Primary key and Foreign key [From Internet]
  3. CodeForces 686B-Little Robber Girl&#39;s Zoo
  4. jQuery ajax - get(),getJSON(),post()方法
  5. xmodem, ymodem &amp; zmodem
  6. VB.net 字符串 分割 及 重新倒序组装
  7. WebApi2 jsonp跨域问题
  8. bzoj1103
  9. 51,PIC,AVR单片机它们的优点缺点都有哪些?
  10. [转]Getting a Packet Trace
  11. Go 从入门到精通(三)字符串,时间,流程控制,函数
  12. WebApi零碎总结
  13. 18春季训练01-3/11 2015 ACM Amman Collegiate Programming Contest
  14. java mvc spring boot
  15. Python.错误解决:scrapy 没有crawl 命令
  16. leetcode 刷题 数组类 Two Sum
  17. HttpWebRequest抓取网页内容与直接输入URL得到的内容不一致!球大神帮忙!!
  18. php里获取第一个中文首字母并排序
  19. Python开发工具,服务器框架等
  20. codeforces 某套题s : surf(贪心 || 动态规划)

热门文章

  1. 逆波兰法求解数学表达示(C++)
  2. Jmeter压测问题_Non HTTP response code: org.apache.http.conn.ConnectTimeoutException
  3. Xcode 自己主动生成版本技术最佳实践
  4. 虚函数的特点就是执行的时候会下降到子类去执行同名覆盖函数 good
  5. C# 文件的一些基本操作(转)//用C#读写ini配置文件
  6. matlab中s函数编写心得-转自水木
  7. POJ 3264 Balanced Lineup (线段树)
  8. c++ 写进文件并读出
  9. z-index 、层叠上下文、层叠级别、z-index失效
  10. Python 34(进程重点)