浙江理工大学 2024 年程序设计竞赛 C 痴呆邦 · 附庸

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网


题目:

随着痴呆邦的繁荣,越来越需要一种先进的制度引领痴呆邦未来的发展。城邦主们提议我们需要组建这样的联邦制度:
- 联邦需要具有唯一的最高联邦首领。
- 每个城邦主具有至多两个附庸,当然它们也可以没有附庸。

这个议案一经提出引来痴呆众和城邦主们的一致支持,这样城邦主们只需专注管理属于自己的两个附庸。实现痴呆邦繁荣的同时又实现 work life balance 是痴呆众一致的追求。

但是现在麻烦的事情复现了,已知存在 nn个城邦,这样的联邦制度存在多少种完全不同的附庸结构呢?

我们认为两个附庸结构不是完全不同的当且仅当可以通过交换任意次任意城邦主的左右附庸结构后得到完全相同的附庸结构。

输入描述:

多组测试数据,第一行一个正整数 t(1≤t≤103),表示数据组数。

每组数据一个正整数 n(1≤n≤103),如题意所示。

输出描述:

每组测试数据输出一个整数,表示完全不同的附庸结构的数量对 998244353 取模的结果。

题意:

已知存在 n 个城邦,联邦需要具有唯一的最高联邦首领每个城邦主具有至多两个附庸,当然它们也可以没有附庸这样的联邦制度存在多少种完全不同的附庸结构呢?

输入t组数据,每组数据一个正整数n,输出存在多少种完全不同的附庸结构并对998244353 取模

思路:

把前几项找出来,然后找规律发现,拆分为不同的已知项,再计算即可,注意重复的情况

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
int a[200010];
signed main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t,n;
    cin>>t;
    a[0]=1;
    a[1]=1;
    a[2]=1;
    a[3]=2;
    for(int i=4;i<=1010;i++)
    {
        for(int j=0;j<=(i-1)/2;j++)
        {
            if(i-1-j==j)
            a[i]=(a[i]%998244353+((a[j]+1)%998244353*a[j]/2)%998244353)%998244353;
            else
            a[i]=(a[i]%998244353+(a[j]%998244353*a[i-1-j]%998244353))%998244353;
        }
    }
    while(t--)
    {
        cin>>n;
        cout<<a[n]%998244353<<endl;
    }
 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值