gdufe acm 1363 校庆嘉宾

本文介绍了一种解决校庆晚会嘉宾座位排列问题的算法,嘉宾们根据声望值进行排序并围绕声望最高者对称分布。文章提供了具体的实现思路及Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:http://acm.gdufe.edu.cn/Problem/read/id/1363

Problem Description:

广财建校33年了,如今迎来了她的校庆,并在今天晚上19:00举行校庆晚会。
晚会邀请了许多嘉宾,如今小财要解决如何给嘉宾安排座位的问题,
嘉宾席只有一排,每个嘉宾有一个声望值,为了方便安排位置,假设每一个嘉宾的声望值都是唯一的。
声望最高的嘉宾选择一个中间的位置,然后两边的嘉宾声望值依次递减。
现场一共来了n个嘉宾,小财想知道有多少种安排方案。
Input:

输入的第一行包括一个T(T <= 50),代表有T组数据。
每组数组一个正整数n(3 <= n <= 50)。

Output:

对于每组数据,输出”Case #x: y”(不包括引号),其中x代表数据的编号,从1开始,y代表该组数据的结果。
Sample Input:

2
3
4
Sample Output:

Case #1: 2
Case #2: 6

Hints:
第一组样例,假设声望值分别为{1,2,3},那么方案有2种,{1,3,2}和{2,3,1}。
第二组样例,假设声望值分别为{1,2,3,4},那么方案有6种,{1,4,3,2},{2,4,3,1},{3,4,2,1},{1,2,4,3},{1,3,4,2},{2,3,4,1}.。

分析:
设声望最高的嘉宾叫张三,由于张三的位置在中间,所以他的右边至少有一人,也就是他的左边可以有1到n-2人。

而且,只要坐在张三左边的k个人确定了,那k个人的顺序,以及张三右边的人的顺序都是确定的(按声望高低排序)

所以,这道题的答案其实就是:
这里写图片描述

又因为:
这里写图片描述

所以答案其实就是 (1 << (n-1)) - 2

然而此题还有个坑,数据太大long long会溢出,所以用java提交:

import java.math.*;
import java.util.*;
class Main{
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        int t = cin.nextInt();
        for(int k = 1; k <= t; k++){
            int n = cin.nextInt();
            BigInteger ans = BigInteger.ONE;
            BigInteger two = new BigInteger("2");
            for(int i = 1; i < n; i++)
                ans = ans.multiply(two);
            ans = ans.subtract(two);
            System.out.printf("Case #%d: ", k);
            System.out.println(ans);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值