首页 > 编程语言 >2024年西安交通大学程序设计校赛

2024年西安交通大学程序设计校赛

时间:2024-05-28 09:02:35浏览次数:30  
标签:状态机 角色 int 矩阵 行动 2024 西安交通大学 此题 校赛

2024年西安交通大学程序设计校赛

因为本人比较菜,所以只补赛时(校内训练赛)写了但没写出的题,完整题解可以参考洛谷的巨巨~:

https://www.luogu.com.cn/article/vzlnmec8


K.崩坏:星穹铁道

关键题面:Corycle 想成为星穹铁道高手,为此他需要对自己的配队了如指掌。由于角色有多种职业,同时为了方便 对角色类型进行定位,他把角色的行动模式分为了三种类型:

  1. 当角色行动时,只会进行普通攻击。
  2. 当角色行动时,若有战技点不少于 1 则必定释放技能,否则进行普通攻击。
  3. 不对角色的行动进行限制。

现在 Corycle 开始了一场战斗,他想知道当队伍中的四名角色一共行动 n 次时,可能会有多少种不同的 行动方案。我们称两个行动方案不同,当且仅当存在至少一个回合中,两个方案里角色行为不同。这个 答案可能是一个很大的数,所以请将答案对 998244353 取模。

分析

由题目来看,这是一道状态机模型,可以考虑 dp,但是 dp 必然要枚举每一次行动和每个状态,复杂度为\(nk\),显然无法过掉此题,此时我们又可以想到状态机的 一个常用优化法案:矩阵,因为矩阵可以代表某个状态满足固定条件乘矩阵转移到新状态。如图可以写出状态机模型和对应的矩阵方程(忽略我丑陋的字体)

bc1670c0535e2d0a51c6412274f33cb8 拷贝

而且每轮的行动方式和顺序固定,不妨以轮为单位进行矩阵相乘

还有就是我没学结构体深入的一些知识,所以先用的是函数加传参的方式解决,ac代码如下

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353;
int mat[3][6][6]={
        {
        {0,1,0,0,0,0},
        {0,0,1,0,0,0},
        {0,0,0,1,0,0},
        {0,0,0,0,1,0},
        {0,0,0,0,0,1},
        {0,0,0,0,0,1}
        },
        {
        {0,1,0,0,0,0},
        {1,0,0,0,0,0},
        {0,1,0,0,0,0},
        {0,0,1,0,0,0},
        {0,0,0,1,0,0},
        {0,0,0,0,1,0}
        },
        {
        {0,1,0,0,0,0},
        {1,0,1,0,0,0},
        {0,1,0,1,0,0},
        {0,0,1,0,1,0},
        {0,0,0,1,0,1},
        {0,0,0,0,1,1}
        }
};
int a[6][6];
int w[4];
int n,kk;
void mul(int z[][6],int x[][6],int y[][6])
{
    static int t[6][6];
    memset(t,0,sizeof t);
    for(int i=0;i<6;++i)
        for(int j=0;j<6;++j)
            for(int k=0;k<6;++k)
                t[i][j]=(t[i][j]+x[i][k]*y[k][j])%mod;
    memcpy(z,t,sizeof t);
}
int qmi(int m[][6],int k)
{
    int f[6][6]={0};
    f[0][kk]=1;
    while(k)
    {
        if(k&1)mul(f,f,a);
        mul(a,a,a);
        k>>=1;
    }
    int c=n%4;
    for(int i=0;i<c;++i)
    {

        mul(f,f,mat[w[i]]);
    }
    int res=0;
    for(int i=0;i<6;++i)res=(res+f[0][i])%mod;
    return res;
}
signed main(){
    cin>>n>>kk;
    for(int i=0;i<6;++i)a[i][i]=1;
    for(int i=0;i<4;++i)
    {
        int x;cin>>x;
        x--;
        w[i]=x;
        mul(a,a,mat[x]);
    }
    cout<<qmi(a,n/4);

}

注意,此题 n 没有说整除 4,也就是还有剩余需要处理


O. 筛法

在算法竞赛的数论知识中,我们接触过埃拉托斯特尼筛法、线性筛法、莫比乌斯反演、杜教筛、Powerful Number 筛、Min_25 筛、洲阁筛等算法来帮助我们优化一些求和/连乘的复杂度,那么现在问题来了, 今天这道题将会使用到上述的哪个算法呢? 现在给定正整数 n,需要你求

\[Xn i=1 Xn j=1 ⌊ n max(i, j) ⌋[i ⊥ j] \]

其中 [i ⊥ j] 表示 i, j 是否互素,即当 gcd(i, j) = 1 时,[i ⊥ j] 的值为 1,其余情况其值为 0。

分析

具体的分析和证明在洛谷大佬的题解中已有描述,我这里就在提一嘴赛时最容易但是很难想起的做法:打表。

因为此题的题面的迷惑性,让人觉得这题是有什么高深的算法从而忘记数论本身找规律的角度思考,只需要取一个小 n,很容易就发现规律\(n^2\)即为答案(隔壁队就是这样过的)

标签:状态机,角色,int,矩阵,行动,2024,西安交通大学,此题,校赛
From: https://www.cnblogs.com/violetoast/p/18217038

相关文章

  • 郑州大学2023-2024第二学期高级语言程序设计-实验6
    郑州大学2023-2024第二学期高级语言程序设计-实验61抗疫凯旋2求10个点到原点的距离和3最小公倍数4变量有多少字节?5是否是斐波那契家族的一员?6递归实现逆序输出整数7河南的抗疫英雄8出生年9汉诺塔问题10素因子分解1抗疫凯旋这道题已经给了提示如何在while......
  • 【专题】2024餐饮行业及营销趋势报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=36256原文出处:拓端数据部落公众号2024年,餐饮行业的趋势展望聚焦于健康、国潮、单品爆款和情感体验四大方向。首先,健康成为了消费者在选择餐饮时的首要考量。人们越来越注重食材的新鲜度和健康性,对菜品的口味也有了更高的要求。这意味着餐饮品牌需......
  • 2024年5月27日第五十六篇
    今天做了一个网页开发,联系了自己的增删改查,和弹出式表单的设计。<template><el-containerclass="layout-container-demo"><el-asidewidth="200px"><el-scrollbar><el-menu:default-openeds="['1','3�......
  • 2024/05/27
    今日学习有关知识时长:78分钟代码行数:80行发表博客数量:1篇今日学习的内容主要是有关数据库操作中的触发器和储存过程。触发器(trigger)就相当于事件绑定,当你进行某类sql语句操作时将会自动调用你你所设置的触发器来进行操作。储存过程(procedure)就相当于我们Java中的方法,可以带有......
  • MindSponge分子动力学模拟——多路径分子模拟(2024.05)
    技术背景在前面的MindSponge教程系列博客中,我们已经介绍过MindSponge分子动力学模拟框架的基础功能使用方法,例如MindSponge的安装与使用、定义分子系统、计算单点能和迭代器等等。这些模块和功能,更多的是凭借MindSpore深度学习框架的自动微分、GPU加速和Python语言的灵活性,而本文......
  • 2024 蓝桥杯省赛游记
    Day-inf看了眼去年的题,一个插头dp一个杜教筛,恐怖如斯群里问了句发现hkhmtr也参加Day1完全没压力所以随便玩了。开场扫了一眼只有8道题,有个树上莫队?T1赛后看知乎好像能直接拿excel生成字符串形式的日期T2一开始没注意白棋一定有13个子,跑完了再看题才想到,提答的......
  • 2024年中国金融行业网络安全案例集
    随着科技的飞速发展,金融行业与信息技术的融合日益加深,网络安全已成为金融行业发展的生命线。金融行业作为国家经济的核心支柱,正在面临着日益复杂严峻的网络安全挑战。因此,深入研究和探讨金融行业的网络安全问题,不仅关乎金融行业的稳健运行,更关系到国家经济的安全和社会的稳......
  • 2024-05-23_结构体概念等作业
    1.如有以下代码:structstudent{intnum;charname[32];floatscore;}stu;则下面的叙述不正确的是:()A.struct是结构体类型的关键字B.structstudent是用户定义的结构体类型C.num,score都是结构体成员名D.stu是用户定义的结构体类型名解析:A:正确,在C......
  • 2024最全java面试题整理(持续更新)
    1.springboot项目和maven项目的区别?(1)打包方式:传统项目如果需要打成war包,需要在WEB-INF目录结构配置web.xml文件;springboot则不需要(2)项目启动方式:传统web项目启动方式:在eclipse和tomcat插件中导入项目,然后启动tomcat,项目也启动了。或者将项目打成war包,放入tomcat中,启动tomca......
  • android studio2024最新详解(完全小白)安装-运行第一个程序
    前面我用2023最新版本的,死活就卡在引入依赖那里卡了两天,俺的崩溃谁知啊!! 后面我就换了个思维,看着网上大多的教程都是基于2022或者2020的,我就找了个看起来非常详细的视频,里面的是2020的,所以我就下载了2020。  有点小伙伴可能会找不到androidstudio的过往版本,这里我就直......