2024杭电多校06——1005交通管控

news2024/11/26 10:33:22

补题点这里

在这里插入图片描述

大意 一个操作杆可以对k个红绿灯进行操作,操作杆上的一个字符对应一个红绿灯,操作包括+,-,0,问每种组合方案有多少种组合方式
+: red->green->yellow->red
-:green->red->yellow->green

可以用一个三进制数表示每个灯的状态,因为k最多只有10个, 3 10 ≤ 60000 3^{10}\leq 60000 31060000, 仔细看会发现+,-操作一个是顺时针转一圈,一个是逆时针转一圈,用 0 , 1 , 2 0,1,2 0,1,2分别表示绿色,黄色,和红色,那么其实就相当于加一再模3,和减一再模三的操作.
每个操作杆用或不用可以考虑类似01背包的动态规划.
设f[i]表示i这个状态有多少种方案
f [ i ] = ( f [ j ] + f [ i ] ) % m o d f[i] = (f[j] +f[i]) \% mod f[i]=(f[j]+f[i])%mod 其中 i i i是j经过操作杆 x x x变化而来的, 所以其实本来的方程有二维,表示的是用到第几个操作杆,但是这一维可以不要,我没有开滚动数组,是另一种常见优化,存储上一轮的结果,用上一轮的结果进行转移,时间复杂度大概是 O ( n k 3 k ) O(nk3^{k}) O(nk3k) 最多 3 e 8 3e8 3e8次,开了 10 s 10s 10s可以接受

最后输出答案的话,我写了个 v e c t o r < p a i r < s t r i n g , i n t > > vector<pair<string,int>> vector<pair<string,int>>,sort了一下,不知道有没有更快的方法,有的话告诉我一下

#include<bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using i64 = long long;


i64 square3[100];
i64 n,k,mod;

//绿色是0,红色是2,黄色是1
inline void solve(){
    cin>>n>>k>>mod;
    vector<string> op(n+1);
    for(int i = 1;i<=n;++i) cin>>op[i];
    vector<i64> f(square3[k]+1,0),f1;//f[i]:i这个状态有多少种方案
    vector<bool> vis(square3[k]+1,0),vis1;
    f[0]=1LL;
    vis[0]=1;
    for(int i = 1;i<=n;++i){
        f1 = f;
        vis1 = vis;
        //x x x x x x   Base3
        //0 1 2 3 4 k-1 遍历顺序,操作顺序
        //k-1 k-2 ...0  位次
        for(int j = 0;j<square3[k];++j){
            if(vis1[j]==0) continue;
            int tmp=0;
            for(int s = 0;s<k;++s){
                int t = (j/square3[k-1-s])%3;
                if(op[i][s]=='+') (t+=1)%=3;
                else if(op[i][s]=='-') (t+=2)%=3;
                tmp = tmp*3+t;
            }
            f[tmp] = (f[tmp]+f1[j])%mod;
            vis[tmp]=1;
        }
    }
    vector<pair<string,int>>p;
    //map<string,int> mp;应该也能过
    for(int i = 0;i<square3[k];++i){
        if(!vis[i]) continue;
        string ss;
        for(int j = k-1;j>=0;--j){
            int t = (i/square3[j])%3;
            ss+=char('A'+t);
        }
        p.push_back({ss,f[i]%mod});
        //mp[ss] = f[i]%mod;
    }
    sort(p.begin(),p.end());
    for(auto i:p){
        cout<<i.first<<" "<<i.second%mod<<"\n";
    }
}

signed main(){
    ios;
    square3[0]=1LL;
    for(int i =1;i<=15;++i) square3[i] = square3[i-1]*3LL;
    int t;cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

写代码途中遇到的问题,TLE,vector直接开60000就会T,要根据k来开,想要更快的话其实可以再读入的时候就开始操作(看std学的).取某一位三进制,进位退位这种操作有比较简单的写法,(写一堆内联函数就显得有点愚蠢->me)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python(模块---pandas+matplotlib+pyecharts)

import pandas as pd import matplotlib.pyplot as plt dfpd.read_excel(简易数据.xlsx) # print(df) plt.rcParams[font.sans-serif][SimHei] #设置画布的大小 plt.figure(figsize(10,6)) labelsdf[电影中文名] ydf[国籍] # print(labels) # print(y)# import pandas as pd im…

[Webpack]webpack-dev-server设置多个路径代理时,proxy顺序有要求

问题背景 前端需要调用多个不同的后台时需要使用devServer.proxy做代理 问题现象 如下图设置ETL相关接口路径代理之后 调用ETL后台接口时产生404报错 问题原因 devServer.proxy在解析代理路径并替换的时候是按顺序解析的&#xff0c;我配置的三个代理中&#xff0c;/csm…

NCL数据分析与处理实践技术

NCAR Command Language&#xff08;NCL&#xff09;是由美国大气研究中心&#xff08;NCAR&#xff09;推出的一款用于科学数据计算和可视化的免费软件。它有着非常强大的文件输入和输出功能&#xff0c;可读写netCDF-3、netCDF-4 classic、HDF4、binary、ASCII数据&#xff0c…

Linux之软硬链接和动静态库

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 C进阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.软硬链接 1.1如何软硬链接 1.2软硬链接的作用 …

ViP-LLaVA: Making Large Multimodal Models Understand Arbitrary Visual Prompts

发表时间&#xff1a;cvpr2024 论文链接&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId2357936887983293952&noteId2426262228488986112 作者单位&#xff1a;University of Wisconsin–Madison Motivation&#xff1a;现在的多模态模型都关注整张图像的理…

html+css网页设计 qq官网首页1个页面无js

htmlcss网页设计 qq官网首页1个页面无js功能 页面1:1还原 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 …

冲击性信号的频域特征

这是一个信号采样数学实验&#xff0c;你可以直观感受到冲击信号的时域和频域特征 1.原始冲击信号&#xff1a; 原始信号是一个频率为180Hz附近的一个冲击性信号&#xff1a; 2.冲击信号频谱 它的频谱&#xff0c;可能会超出你的想象&#xff0c;它的1x频率幅度可能并不最高…

iOS ------ autoreleasePool

一&#xff0c;autoReleasePool{} int main(int argc, const char * argv[]) {autoreleasepool {}return 0; }我们平时创建一个main函数的代码的时候&#xff0c;就会发现其中有一个这个东西autoreleasepool{}&#xff0c;使用clang编译之后&#xff1a;autoreleasepool{…}被…

对《国家汽车芯片标准体系建设指南》好奇,遂读

基础通用&#xff1a;基于汽车行业对芯片的可靠性、运行稳定性 和安全性等应用需求&#xff0c;提取出汽车芯片性通用要求&#xff0c;主要包括环境及可靠性、电磁兼容、功能安全和信息安全共4个方面的要求。 产品与技术应用&#xff1a;根据实现功能的不同&#xff0c;将汽车…

文献综述能否帮助研究人员认识特定学术领域的趋势和新兴主题

VersaBot一键生成文献综述 进行良好的文献综述可以成为研究人员识别特定学术领域的趋势和新兴主题的强大工具。就是这样; 1. 识别模式和重复出现的概念&#xff1a; 当您深入研究现有研究时&#xff0c;您自然会开始注意到不同研究中采用的重复出现的主题、想法和方法。这些模…

详解爬虫使用代理ip的几种方案

​ 在如今这个信息爆炸的时代&#xff0c;数据就是财富。对于许多从事数据分析、市场调研和大数据处理的人来说&#xff0c;网络爬虫已经成为了他们的得力助手。然而&#xff0c;随着网站对爬虫的防范措施越来越严格&#xff0c;使用代理IP已经成为了爬虫工作中的一项必备技能。…

05:【stm32】重映射AFIO

重映射AFIO 1、什么是AFIO2、怎么使用AFIO 1、什么是AFIO AFIO是stm32上的众多片上外设之一&#xff0c;专门用来执行“复用功能的重映射” 2、怎么使用AFIO 如下图所示&#xff1a;当我们要同时使用USART1和TIM1时&#xff0c;我们就需要使用AFIO进行使其中一个片上外设进行重…

【iOS】SideTable

目录 SideTablesStripedMapSideTable1. spinlock_t slock2. RefcountMap3. weak_table_t 总结 objc4源码地址&#xff1a; SideTable& table SideTables()[this]; // 获取对象的SideTable size_t& refcntStorage table.refcnts[this];SideTables 查源码SideTables…

Android 多语言切换

文章目录 在系统设置修改语言创建资源目录创建资源文件示例验证 代码手动切换语言在Application中设置新的语言环境在MainActivity / BaseActivity中设置新的语言环境验证 问题1. makeText()方法context传入是Application的context&#xff0c;无法获取正确的资源字符串原因解决…

Docker + Nacos + Spring Cloud Gateway 实现简单的动态路由配置修改和动态路由发现

1.环境准备 1.1 拉取Nacos Docker镜像 从Docker Hub拉取Nacos镜像&#xff1a; docker pull nacos/nacos-server:v2.4.01.2 生成密钥 你可以使用命令行工具生成一个不少于32位的密钥。以下是使用 OpenSSL 生成 32 字节密钥的示例&#xff1a; openssl rand -base64 321.3 …

免费插件集-illustrator插件-Ai插件-选择路径等分

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;路径处理功能&#xff0c;功能是选择路径等分。首先从下载网址下载这款插件 https://download.csdn.net/download…

本地Gitlab-runner自动编译BES项目

0 Preface/Foreword 1 Gitlab-runner配置情况 具体情况如下&#xff1a; Gitlab-ruuner运行在wsl 1中的Ubuntu 18.04 distro上专门为GitLab-runner分配了一个用户&#xff0c;名为gitlab-runner 2 自动编译 2.1 找不到编译工具链 根据错误提示&#xff0c;交叉编译工具链未找…

Springboot利用大模型实现即时通信

gitee地址&#xff1a;https://gitee.com/myha/Springboot-langchain-chat 版本及工具说明 本项目版本&#xff1a;springboot3.2.8 jdk17 mybatis-plus3.5.7 安装python&#xff0c;可以参考&#xff1a;https://docs.python.org/zh-cn/3/using/windows.html#the-full-in…

zsh 配置 docker 自动补全

zsh 配置 docker 自动补全 在终端中使用 docker 的命令的时候必须要全部手敲&#xff0c;没有提示&#xff0c;于是就在找是否有自动补全的脚本&#xff0c;搜索了一圈踩了一些坑总结了一下具体的步骤。 首先执行如下命令&#xff1a; mkdir -p ~/.zsh/completion curl -L h…

Visual Studio创建 OpenCV项目

1、cmake 编译 opencv 参考链接&#xff1a;CMake编译OpenCV3.4.1心得_cmake 3.4.1-CSDN博客 1&#xff09;opencv文件名最好不要有空格 2&#xff09;没有下载opencv_contrib&#xff0c;不用配置OPENCV_EXTRA_MODULES_PATH 1、Visual Studio创建 OpenCV项目 参考链接&am…