HDOJ 1214 圆桌会议

简介: HDOJ 1214 圆桌会议

Problem Description

HDU ACM集训队的队员在暑假集训时经常要讨论自己在做题中遇到的问题.每当面临自己解决不了的问题时,他们就会围坐在一张圆形的桌子旁进行交流,经过大家的讨论后一般没有解决不了的问题,这也只有HDU ACM集训队特有的圆桌会议,有一天你也可以进来体会一下哦:),在一天在讨论的时候,Eddy想出了一个极为古怪的想法,如果他们在每一分钟内,一对相邻的两个ACM队员交换一下位子,那么要多少时间才能得到与原始状态相反的座位顺序呢?(即对于每个队员,原先在他左面的队员后来在他右面,原先在他右面的队员在他左面),这当然难不倒其他的聪明的其他队友们,马上就把这个古怪的问题给解决了,你知道是怎么解决的吗?


Input

对于给定数目N(1<=N<=32767),表示有N个人,求要多少时间才能得到与原始状态相反的座位顺序(reverse)即对于每个人,原先在他左面的人后来在他右面,原先在他右面的人在他左面。


Output

对每个数据输出一行,表示需要的时间(以分钟为单位)


Sample Input

4

5

6


Sample Output

2

4

6


思路:

把圆桌分成两部分,分别求两部分的逆序数,然后再让分开后的圆桌合并(即让两逆序数相加),n个有序数的逆序数为:n*(n-1)/2; 所以为了让结果逆序数最小,则尽量要让两部分等分(也就是说若为n个人的圆桌,则一部分是 n/2,另一部分为 n-n/2)

由题意可知目的是将123…n 转化为n….321 可知要转换n+n-1+…1 = n*(n-1)/2 次, 即1转到最后一位需要n次, 2转换到n-1的位置需要n-1次…

又因为是首尾相接的所以可以一半从这边交换, 另一半从那边交换.

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            System.out.println(f(n/2)+f(n-n/2));
        }
    }
    private static int f(int i) {
        return i*(i-1)/2;
    }
}
目录
相关文章
hdoj 1907
这是一道博弈的题,准确说是尼姆博弈,只要判断各项的异或值即可。
42 0
hdoj 2089 不要62
这题数据量相对比较小,可以暴力打表解决。不过我这里用数位dp 刚开始学数位dp,参考了别人的代码。
61 0
HDOJ 2046 骨牌铺方格
HDOJ 2046 骨牌铺方格
152 0
HDOJ 2046 骨牌铺方格
HDOJ 2057 A + B Again
HDOJ 2057 A + B Again
112 0
HDOJ 2040 亲和数
HDOJ 2040 亲和数
134 0
HDOJ 2004 成绩转换
HDOJ 2004 成绩转换
101 0
|
编译器
HDOJ 2030
统计给定文本文件中汉字的个数 汉字机内码在计算机的表达方式的描述是,使用二个字节,每个字节最高位一位为1。 计算机中, 补码第一位是符号位, 1 表示为 负数, 所以 汉字机内码的每个字节表示的十进制数都是负数 统计输入字符串含有几个汉字,只只需求出字符串中小于0的字符有几个,将它除...
635 0
|
Java 机器学习/深度学习
HDOJ 2081
手机短号 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9653 Accepted Submission(s): 6102 Problem Description 大家都知道,手机号是一个11位长的数字串,同时,作为学生,还可以申请加入校园网,如果加入成功,你将另外拥有一个短号。
893 0

热门文章

最新文章