ECJTU ACM18级队员寒假训练赛
~
A题
题意:将一个从1到n的数字序列分成2个序列
求出两个序列之和的绝对值之差的最小值
输出这个最小值
/这道题的意思很明显如果从1到n加起来为整数的话那么怎样都能平分成
2个加起来和相同的序列,如果加起来是奇数,那么一定存在2个序列他们的和的差为1
`#include<stdio.h>
int main()
{
int a;
long long n;//注意到如果用int型数据可能数据会爆
scanf("%lld",&n);
long long ans=n*(n+1)/2;
if(ans%2==0)//用单精度或者双精度无法进行取余计算
a=0;
else
a=1;
printf("%d",a);
return 0;
}
H题
圆桌逆序求n个人交换次数最少,输出最少次数
题目要点:将圆桌分成2行人,再进行排序
类似与冒泡排序的最坏情况
而其最坏情况存在一个最少交换次数公式
即sum=n*(n-1)/2
分成2行即两行人数相同或者相差一位的时候为最大
可利用上面的公式进行推导
可得出一个函数求出最小值为两者相等的时候
#include<stdio.h>
int main()
{
int n,b,a;
while(scanf("%d",&n)!=EOF)
{
a=n/2;
b=n-a;
printf("%d\n",a*(a-1)/2+b*(b-1)/2);
}
return 0;
}