Disdain Chain

链接:https://ac.nowcoder.com/acm/problem/13815
来源:牛客网
 

题目描述

BNU ACM校队现在有n名队员,对于任意两名队员i和j,要么i鄙视j,要么j鄙视i,需要注意的是鄙视关系并不满足传递性,即使i鄙视j、j鄙视k,也并不意味着一定有i鄙视k。小Q同学认为,如果有t名不同的队员满足a_1鄙视a_2、a_2鄙视a_3、……、a_{t-1}鄙视a_t,那么这就是一条长度为t的鄙视链。显然鄙视链越长越不利于团队建设,小Q同学希望你帮他分别算一算有多少种n个人之间的鄙视关系满足最长的鄙视链的长度是1,2,3,...,n。

输入描述:

第一行是一个正整数T(≤ 6),表示测试数据的组数, 每组测试数据包含一行,只有一个整数n(2 ≤ n ≤ 7),表示校队的人数。

输出描述:

对于每组测试数据,输出n行,第i行表示最长鄙视链是i的鄙视关系的个数。

示例1

输入

复制

1
2

输出

复制

0
2

说明

在队伍只有2名队员的情况下,无论谁鄙视谁,最长鄙视链的长度都是2。

too young,too simple

队员人数就是鄙视链的最长长度

这个题让我深刻的认识到了差距

位移运算符,

解题思想:

开始我以为是:从n个队员中选出2位建立鄙视链,即组合C(n 2), n*(n-1)/2

其实是:

Disdain Chain_第1张图片

每一位队员都和其他队员产生鄙视与被鄙视的关系

也就是2的n*(n-1)/2次方

转换成位移运算

 

import java.util.Arrays;
import java.util.Scanner;
public class Main {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int T=sc.nextInt();
        int n;
        while(T>0){
            n=sc.nextInt();
            for(int i=0;i                 System.out.println("0");
            }
            System.out.println(1<<(n*(n-1)/2));
            T--;
        }
    }
}

你可能感兴趣的:(牛客竞赛数学)