Codeforces 899C - Dividing the numbers
2024-08-24 04:01:56
传送门: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步:将元素i和n+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 ;
}
最新文章
- linux 几个控制流语句的格式例子(if语句)
- Database Primary key and Foreign key [From Internet]
- CodeForces 686B-Little Robber Girl&#39;s Zoo
- jQuery ajax - get(),getJSON(),post()方法
- xmodem, ymodem &; zmodem
- VB.net 字符串 分割 及 重新倒序组装
- WebApi2 jsonp跨域问题
- bzoj1103
- 51,PIC,AVR单片机它们的优点缺点都有哪些?
- [转]Getting a Packet Trace
- Go 从入门到精通(三)字符串,时间,流程控制,函数
- WebApi零碎总结
- 18春季训练01-3/11 2015 ACM Amman Collegiate Programming Contest
- java mvc spring boot
- Python.错误解决:scrapy 没有crawl 命令
- leetcode 刷题 数组类 Two Sum
- HttpWebRequest抓取网页内容与直接输入URL得到的内容不一致!球大神帮忙!!
- php里获取第一个中文首字母并排序
- Python开发工具,服务器框架等
- codeforces 某套题s : surf(贪心 || 动态规划)
热门文章
- 逆波兰法求解数学表达示(C++)
- Jmeter压测问题_Non HTTP response code: org.apache.http.conn.ConnectTimeoutException
- Xcode 自己主动生成版本技术最佳实践
- 虚函数的特点就是执行的时候会下降到子类去执行同名覆盖函数 good
- C# 文件的一些基本操作(转)//用C#读写ini配置文件
- matlab中s函数编写心得-转自水木
- POJ 3264 Balanced Lineup (线段树)
- c++ 写进文件并读出
- z-index 、层叠上下文、层叠级别、z-index失效
- Python 34(进程重点)