【1214】 圆桌会议 有意思的数论

在这里插入图片描述
http://acm.hdu.edu.cn/showproblem.php?pid=1214

不得不佩服杭电里的题确实新颖。

题意: 是这样的让这个圆翻转一下,问其最小的步数
在这里插入图片描述
圆圈不好想,那么我们先用一条线来想。
在这里插入图片描述
这不就是一个冒泡排序,问排序数字移动的次数么?

那么圆圈该如何移动? 其实是一样的不过我们要分两段,分别的移动。
原因是这样的:
在这里插入图片描述
我们粗略的看成 n x n 假如 n=5 则sum=5x5=25
如果我们分成两段 sum=2x2+3x3=13 步数明显的要少。
至于分3段等其它是不可以的,不信的话你模拟一下,3段 反转后 顺序不对。
故只能分两段。
那么问题就来了,如何的分成两段呢? 答案是接近平均最好。
设分成a,b两段,b=n-a,则总次数为:
在这里插入图片描述

#include<cstdio>
#include<iostream>
using namespace std;
int main(void)
{
	int n;
	while(cin>>n)
	{
		int a=n/2;
		int b=n-a;
		cout<<a*(a-1)/2+b*(b-1)/2<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值