Codeforces Round #452 (Div. 2) C. Dividing the numbers(水)
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(水)的更多相关文章
- Codeforces Round #358 (Div. 2) A. Alyona and Numbers 水题
A. Alyona and Numbers 题目连接: http://www.codeforces.com/contest/682/problem/A Description After finish ...
- Codeforces Round #452 (Div. 2) A B C
Codeforces Round #452 (Div. 2) A Splitting in Teams 题目链接: http://codeforces.com/contest/899/problem/ ...
- Codeforces Round #452 (Div. 2) 899E E. Segments Removal
题 OvO http://codeforces.com/contest/899/problem/E Codeforces Round #452 (Div. 2) - e 899E 解 用两个并查集(记 ...
- 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 ...
- 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 ...
- 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 ...
- 【Codeforces Round #452 (Div. 2) C】 Dividing the numbers
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] n为偶数. l = 1, r = n (l,r)放在一组 l++,r-- 新的l,r放在另外一组 直到l+1==r 这个时候,判断两 ...
- 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 ...
- 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 ...
随机推荐
- 201621123008《Java程序设计》第七周学习总结
1. 本周学习总结 1.1 思维导图:Java图形界面总结 2.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 监听,事件源,事件,注册. 1.2 任意编写事件处理 ...
- UI设计小白怎样学才能快速入门?
最近有很多同学问我,UI小白有什么捷径可以快速入门?其实我想说设计这门学科没有什么捷径,真的只有多学.多看.多练.多想.多做. 1.先学软件 如果你是小白,软件也不会用,那就先学软件,从PS开始,先看 ...
- cmake 头文件 库文件 链接库
原文地址:http://www.cnblogs.com/binbinjx/p/5626916.html 1. 添加头文件目录INCLUDE_DIRECTORIES 语法: include_direct ...
- flex 分页
<?xml version="1.0" encoding="utf-8"?><s:Group xmlns:fx="http://ns ...
- UVa 508 Morse Mismatches (模糊暴力)
题意:莫尔斯电码,输入若干个字母的Morse编号,一个字典和若干编码.对于每个编号,判断它可能的是哪个单词, 如果有多个单词精确匹配,输出第一个单词并加一个“!”:如果无法精确匹配,那么在编码尾部增加 ...
- struts2 一些注解
实现的JSP页面位置 web-root/jsp/user/add.jsp /update.jsp // /* @Namespace("/t") @AllowedMethods(va ...
- hdu 1348 凸包模板
http://acm.hdu.edu.cn/showproblem.php?pid=1348 造城墙问题,求出凸包加上一圈圆的周长即可 凸包模板题 #include <cstdio> #i ...
- KMP回顾学习
记住这张图,getnext就是对一个已知的待匹配的串进行分析,nex[i]表示当a[i]匹配失败后我能跳到哪里,继续尝试匹配,而不是每一次失败都从头再来,先来看看代码 const int maxn = ...
- Spring注解使用和与配置文件的关系
Spring注解使用和与配置文件的关系 1 注解概述与容器管理机制 Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repositor ...
- 自适应XAML布局经验总结 (三) 局部布局设计模式2
本系列对实际项目中的XAML布局场景进行总结,给出了较优化的自适应布局解决方案,希望对大家有所帮助. 下面继续介绍局部布局设计模式. 5. 工具箱模式 绘图,三维模型操作等需要工具的情况,可以使用带分 ...