Educational Codeforces Round 139 (Rated for Div. 2)

Educational Codeforces Round 139 (Rated for Div. 2)

Problem - 1766E - Codeforces

显然我们可以把0序列的贡献单独算: i*(n-i+1) 

考虑只存在1,2,3的情况.

首先通过,观察到一个重要性质:

最多只有三种序列.

  1. 含有3或纯1或纯2型.
  2. 纯1或纯2型
  3. 纯2或纯1型

我们每次添加元素的操作,只跟上一个位置序列的最后一个元素有关

每个位置最多有3种类型的序列,所以每个位置的状态数是很有限的,这个很重要!

设 dp[i][j][k][l] 表示 以i为右端点的且当前序列状态为 (j,k,l) 的区间数量.

转移:

当前位置为  b[i],  枚举上一个位置的状态(j,k,l)

转移方程为:

 

 

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define int long long
#define endl '\n'
#define bit(x) (1ll << x)
using namespace std;
const int N = 3 * 1e3 + 5;
const int inf = 1e16;
int dp[7][7][7][7];
void solve()
{
    int n;
    cin >> n;
    vector<int> a(n + 1), b(n + 1);
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        cin >> b[i];
    }
    int now = 0;
    int nex = 0;
    for (int i = 1; i <= n; i++)
    {
        dp[now][0][0][0]++;
        if (b[i] == 0)
        {
            ans += i * (n - i + 1);//单独统计0序列的贡献,其他状态由上一个转移,没变
        }
        else
        {
            nex = now^1;
            for (int j = 0; j <= 3; j++)
                for (int k = 0; k <= 3; k++)
                    for (int l = 0; l <= 3; l++)
                    {
                         dp[nex][j][k][l] = 0;
                    }
                       
            for (int j = 0; j <= 3; j++)
            {
                for (int k = 0; k <= 3; k++)
                {
                    for (int l = 0; l <= 3; l++)
                    {
                        if (j == 0 || (j & b[i]))//当j == 0 (开新序列)或 b[i]于j有交集(维护序列最后一个值)
                        {
                            dp[nex][b[i]][k][l] += dp[now][j][k][l];
                        }
                        else if (k == 0 || (k & b[i]))//同上
                        {
                            dp[nex][j][b[i]][l] += dp[now][j][k][l];
                        }
                        else
                        {
                            dp[nex][j][k][b[i]] += dp[now][j][k][l];
                        }
                    }
                }
            }
            now = nex;
        }
        for (int j = 0; j <= 3; j++)
        {
            for (int k = 0; k <= 3; k++)
            {
                for (int l = 0; l <= 3; l++)
                {
                   ans += dp[now][j][k][l] * ((j > 0 ? 1 : 0) + (k > 0 ? 1 : 0) + (l > 0 ? 1 : 0));
                }
            }
        }
    }
    cout << ans << endl;
}
q
signed main()qq
{
    /*ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);*/
    int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}q

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

hugging face开源的transformers模型可快速搭建图片分类任务

2017年,谷歌团队在论文「Attention Is All You Need」提出了创新模型,其应用于NLP领域架构Transformer模型。从模型发布至今,transformer模型风靡微软、谷歌、Meta等大型科技公司。且目前有模型大一统的趋势,现在transformer 模型不仅风靡整个NLP领域,且随着VIT SWIN等变体…

什么是高性能计算实习生?做高性能计算有前景吗?

随着大模型和算力时代的大火&#xff0c;高性能计算实习的岗位越来越多了&#xff0c;各个大厂都在码人&#xff0c;百度、小米、字节、华为等等&#xff0c;也有很多网友晒出了面试一众知名芯片企业的面经和笔试题。 但是依然有很多朋友不清楚什么是高性能计算实习生&#xf…

YOLOv5白皮书-第Y4周:common.py文件解读

目录 0.导入需要的包和基本配置1.基本组件1.1 autopad1.2 Conv1.3 Focus1.4 Bottleneck1.5 BottleneckCSP1.6 C31.7 SPP1.8 Concat1.9 Contract、Expand 2.重要类2.1 非极大值抑制&#xff08;NMS&#xff09;2.2 AutoShape2.3 Detections2.4 Classify &#x1f368; 本文为&am…

掌握了它,软件测试拿下25K轻轻松松!

了解软件测试这行的人都清楚&#xff0c;功能测试的天花板可能也就15k左右&#xff0c;而自动化的起点就在15k左右&#xff0c;当然两个岗位需要掌握的技能肯定是不一样的。 如果刚入门学习完软件测试&#xff0c;那么基本薪资会在7-8k左右&#xff0c;这个薪资不太高主要是因…

STM8、STM8S003F3P6 实现PWM控制电机HAS10227

背景 有个项目需要控制一台风机的转速&#xff0c;使用STM8S003F3P6 输出PWM控制&#xff0c;这里就详细记录一下调试记录 原理图 原理图比较简单&#xff0c;电机接口CN3 电机接口原理图 与MCU管脚连接位置如下图 首先我们要明白电机的原理 电机 简单来说就是 实现电能与…

锁的内存语义

锁的释放和获取的内存语义 操作锁的释放和获取的内存语义类比volatile对锁释放和锁获取的内存语义做个总结当线程 释放锁 时JMM会把该线程对应的本地内存中的共享变量刷新到主内存中锁释放与 volatile写 有相同的内存语义线程A释放一个锁&#xff0c;实质上是线程A向接下来将…

功率信号源的使用方法有哪些

功率信号源是一种常见的电子设备&#xff0c;主要用于产生各种功率信号&#xff0c;例如直流信号、正弦信号等。功率信号源广泛应用于工业、科研、医疗等领域&#xff0c;例如电机驱动、电子仪器仪表、医疗设备等。本文将详细介绍功率信号源的使用方法和注意事项。 图&#xff…

WMS仓储管理系统解决方案能帮助电子企业解决哪些问题

WMS仓储管理系统解决方案是一种针对仓库管理的软件系统&#xff0c;它能够有效地解决电子企业在仓储管理方面的问题。在电子行业&#xff0c;由于产品的生命周期较短&#xff0c;且需求变化快速&#xff0c;WMS仓库管理系统的应用对于电子企业的管理有着重要的意义。本文将探讨…

【MySQL】MySql的底层数据结构

文章目录 前言索引结构及查找算法不适合做MySql的数据结构及其原因 一、BTree和BTree的引出1.1 BTree数据结构2.2 BTree数据结构 二、计算m阶&#xff0c;即BTree该取多少合适总结 前言 索引结构及查找算法 一个sql语句在mysql里究竟是如何运行的呢&#xff1f;又是怎么去查找…

华为云服务器租用费用及CPU性能(1核2G/2核4G/4核8G)

华为云HECS云服务器即云耀云服务器&#xff0c;类似于阿里云和腾讯云的轻量应用服务器&#xff0c;HECS云服务器1核2G配置39.02元一年、2核4G配置99元一年、4核8G配置69.94元3个月&#xff0c;华为云百科分享华为云HECS云服务器租用费用及CPU性能详解&#xff1a; 目录 华为云…

《数据库应用系统实践》------ 包裹信息管理系统

系列文章 《数据库应用系统实践》------ 包裹信息管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&…

immutable深拷贝:数据多层属性-不可变数据结构

一、为何要用immutable深拷贝&#xff1f; 1.浅拷贝&#xff08;浅复制&#xff09; //引用赋值-浅复制、浅拷贝 var obj{name:"溜溜球"}var obj2obj;obj2.name"刘刘球";console.log(obj);//name:"刘刘球"console.log(obj2);//name:"刘刘…

解说天下之操作系统

解说天下之操作系统 本文由桌案drawon (https://www.drawon.cn)&#xff0c;云晶&#xff08;https://www.yunjingxz.com&#xff09;创始人根据多年从业经验&#xff0c; 从操作系统的起源&#xff0c;应用分类&#xff0c; 设计分类&#xff0c;以及资源使用角度对操作系统进…

2023年6月18日DAMA-CDGA/CDGP认证北京/上海/深圳报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

思维导图到底有多少种?

思维导图是一种非常实用的工具&#xff0c;它可以帮助我们更好地组织和表达我们的思想。在日常生活和工作中&#xff0c;我们可以使用各种不同类型的思维导图来解决不同的问题。下面&#xff0c;我将介绍一些常见的思维导图类型以及如何使用ProcessOn思维导图软件制作思维导图。…

ThreadLocal的应用

1. ThreadLocal 是什么 JDK 对ThreadLocal的描述为&#xff1a; 此类提供线程局部变量。这些变量与普通变量的不同之处在于&#xff0c;每个访问一个变量的线程&#xff08;通过其get或set方法&#xff09;都有自己的、独立初始化的变量副本。ThreadLocal 实例通常是类中的私有…

Centos7安装Java8(在线安装避坑详细安装)

开篇语&#xff1a; 喜欢在一个明媚阳光的午后 坐在那夕阳斑驳的南墙下 听着风起 闻着花香 望着远山 身边是你 如此便觉得很好 1.查看目前环境 rpm -qa|grep jdk在这里我们会发现&#xff0c;原有系统安装有jdk&#xff0c;如果对于jdk有要求&#xff0c;我们就需要重新安装jdk…

面了一个测试工程师要求月薪26K,总感觉他背了很多面试题...

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

3DMAX车缝线生成器插件使用方法详解

3dMax车缝线生成器插件,用于创建缝合对象和一个对象,以沿样条线或仅通过绘制选定边上的缝合之间的孔。 目前有两种类型的缝线,圆形缝线和平面缝线。对于给定类型的针脚,它们的厚度是最常用的。缝线的长度和间距以及旋转都可以很容易地调整,这些参数也可以随机设置,以创造…

[C语言][典例详解]打印杨辉三角(找规律简单实现)

目录 杨辉三角的相关知识 杨辉三角图&#xff1a; 杨辉三角的规律 在编程中实现 第一步 &#xff1a;我们先实现数字的打印&#xff0c;后面再加上空格构成三角形形状&#xff1b; ​编辑 1.首先我们可以直观的看出三角形的两个斜边都是1&#xff1b;所以我们先打印斜边的…
最新文章