AC修炼计划(AtCoder Beginner Contest 335)E-F

传送门:

AtCoder Beginner Contest 335 (Sponsored by Mynavi) - AtCoder

A,B,C,D还算比较基础,没有什么思路,纯暴力就可以过。

这里来总结一下E和F

E - Non-Decreasing Colorful Path

最开始以为是树形dp,一直在纠结与树形的结构,后来发现我们可以从权值小的向权值大的数遍历,这样的话我们可以保证先提条件就是非递减的,而后在考虑树形的链接关系,由大权值的数字来迭代小权值的数字:

// #pragma GCC optimize(3)  //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int mod=998244353;
const int MX=0x3f3f3f3f3f3f3f3f;
int n,m;
int a[500005];
int pre[500005];
int v[500005];
int find(int x){
    if(pre[x]==x)return x;
    return pre[x]=find(pre[x]);
}
bool cmp(int x,int y){
    return a[x]<a[y];
}
void icealsoheat(){
    cin>>n>>m;
    vector<vector<int>>ve(n+5);
    vector<int>dp(n+5,-0X3f3f3f3f);
    for(int i=1;i<=n;i++){
        cin>>a[i];
        pre[i]=i;
        v[i]=i;
    }
    sort(v+1,v+1+n,cmp);
    // for(int i=1;i<=n;i++)cout<<v[i]<<"+++\n";
    for(int i=1;i<=m;i++){
        int l,r;
        cin>>l>>r;
        if(a[l]==a[r]){
            pre[find(l)]=find(r);
        }
        ve[l].push_back(r);
        ve[r].push_back(l);
    }
    dp[find(1)]=1;
    for(int i=1;i<=n;i++){
        for(auto j:ve[v[i]]){
            if(a[find(v[i])]>a[find(j)]){
                dp[find(v[i])]=max(1+dp[find(j)],dp[find(v[i])]);
            }
        }
    }
    // cout<<dp[find(n)];
    dp[find(n)]=max(0ll,dp[find(n)]);
    cout<<dp[find(n)];


}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie();
    cout.tie();
    int _yq;
    _yq=1;
    // cin>>_yq;
    while(_yq--){
        icealsoheat();
    }
}

F - Hop Sugoroku

这个题比较巧妙,最初我们能够很容易的想到时间复杂度为O(n^{2})的dp迭代方法,但2e5的数据很显然不能直接这样迭代,所以我们需要想到优化的方法。我们发现如果i+a[i]*x==j,那么可以等价于i%a[i]==j%a[i],我们可以用dp[a[i]][i%a[i]]来存储每一个,而对于大于a[i]>sqrt(n)的数字来说,我们可以直接遍历求解,这样我们能够保证所有情况的时间复杂度为O(n\sqrt{n}):

代码如下:

// #pragma GCC optimize(3)  //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int mod=998244353;
const int MX=0x3f3f3f3f3f3f3f3f;
int n,m;
int a[500005];
int cnt[500005];
void icealsoheat(){
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    vector<vector<int>>dp(sqrt(n)+5,vector<int>(n+5,0));
    int ans=0;
    cnt[1]=1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=sqrt(n);j++){
            cnt[i]+=dp[j][i%j];
            cnt[i]%=mod;
        }
        ans+=cnt[i];
        ans%=mod;
        if(a[i]>sqrt(n)){
            int x=a[i];
            while(i+x<=n){
                cnt[i+x]+=cnt[i];
                cnt[i+x]%=mod;
                x+=a[i];
            }
        }
        else{
            dp[a[i]][i%a[i]]+=cnt[i];
            // dp[a[i]][i%a[i]]++;
            dp[a[i]][i%a[i]]%=mod;
        }
    }
    // cout<<cnt[1]<<"+++\n";
    // for(int i=1;i<=n;i++)cout<<cnt[i]<<"+++\n";
    cout<<ans;

    

}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie();
    cout.tie();
    int _yq;
    _yq=1;
    // cin>>_yq;
    while(_yq--){
        icealsoheat();
    }
}

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

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

相关文章

顶级Web应用程序测试工具列表

今天主要列举Web应用程序的工具。 今天的列表仅仅提供索引功能&#xff0c;具体要使用的同学&#xff0c;可以自行搜索哦。 通过web应用程序测试&#xff0c;在web应用程序公开发布之前&#xff0c;会发现网站功能、安全性、可访问性、可用性、兼容性和性能等问题。 Web应用程…

细说JavaScript语句详解

一、顺序结构 二、表达式语句 三、声明语句 四、条件语句 1、if语句 2、if…else语句 3、else if语句 4、switch语句 五、循环语句 1、while循环 2、do… while循环 3、for循环 4、for…in循环 六、跳出语句 1、label语句 2、break语句 3、continue语句

【MySQL】基础篇

文章目录 一、SQL规则与规范二、基本的SELECT语句SELECT...FROM...;列的别名 AS ""去除重复行 DISTINCT空值参与运算 结果一定也为NULL着重号 常量描述表结构 DESCRIBE过滤数据 WHERE 三、运算符算术运算符比较运算符非符号类型运算符逻辑运算符运算符优先级 四、排序…

Git 是什么?

Git 是什么&#xff1f; Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;…

ubuntu 2022.04 安装vcs2018和verdi2018

主要参考网站朋友们的作业。 安装时参考&#xff1a; ubuntu18.04安装vcs、verdi2018_ubuntu安装vcs-CSDN博客https://blog.csdn.net/qq_24287711/article/details/130017583 编译时参考&#xff1a; 【ASIC】VCS报Error-[VCS_COM_UNE] Cannot find VCS compiler解决方法_e…

陶瓷碗口缺口检测-图像分割

图像分割 由于对碗口进行缺口检测&#xff0c;因此只需要碗口的边界信息。得到陶瓷碗区域填充后的图像&#xff0c;对图像进行边缘检测。这是属于图像分割中的内容&#xff0c;在图像的边缘中&#xff0c;可以利用导数算子对数字图像求差分&#xff0c;将边缘提取出来。 本案…

电流检测方法

电路检测电路常用于&#xff1a;高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 对于大部分应用&#xff0c;都是通过感测电阻两端的压降测量电流。 一般使用电流通过时的压降为数十mV&#xff5e;数百mV的电阻值&…

42 智能指针 auto_ptr, unique_ptr,shared_ptr,weak_ptr 整理

都是类模版 都不用开发者自己delete 指针。这是因为智能指针有自己管理指向对象的能力&#xff0c;包括释放指向的内存&#xff0c;因此开发者不要自己释放。 auto_ptr, &#xff08;废弃&#xff09;C98 已经被弃用&#xff0c;替代方案是unique_ptr. 被弃用的原因: 1.不能…

基于传统机器学习模型算法的项目开发详细过程

1 场景分析 1.1 项目背景 描述开发项目模型的一系列情境和因素&#xff0c;包括问题、需求、机会、市场环境、竞争情况等 1.2. 解决问题 传统机器学习在解决实际问题中主要分为两类&#xff1a; 有监督学习&#xff1a;已知输入、输出之间的关系而进行的学习&#xff0c;从而…

Minio安装及整合SpringBoot

一. MinIO概述 官网地址&#xff1a;https://minio.org.cn MinIO是一款基于Apache License v2.0开源协议的分布式文件系统&#xff08;或者叫对象存储服务&#xff09;&#xff0c;可以做为云存储的解决方案用来保存海量的图片、视频、文档等。由于采用Golang实现&#xff0c;服…

《Git学习笔记:Git入门 常用命令》

1. Git概述 1.1 什么是Git&#xff1f; Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html页面等&#xff09;&#xff0c;在软件开发过程中被广泛使用。 其它的版本控制工具 SVNCVSVSS 1.2 学完Git之后能做…

数据在AI任务中的决定性作用:以图像分类为例

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

基于SSM的法律咨询系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

虾皮shopee根据ID取商品详情 API (shopee.item_get)

Shopee 是一个流行的电商平台&#xff0c;提供了 API 来允许开发者与平台进行交互。如果你想通过 API 根据商品 ID 获取商品详情&#xff0c;你可以使用 Shopee 的 item_get API。 以下是使用 Shopee 的 item_get API 根据商品 ID 获取商品详情的步骤&#xff1a; 获取 API 密…

希尔排序和计数排序

&#x1f4d1;前言 本文主要是【排序】——希尔排序、计数排序的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句…

音频编辑软件:Studio One 6 中文

Studio One 6是一款功能强大的数字音乐制作软件&#xff0c;为用户提供一站式音乐制作解决方案。它具有直观的界面和强大的音频录制、编辑、混音和制作功能&#xff0c;支持虚拟乐器、效果器和第三方插件&#xff0c;可帮助用户实现高质量的音乐创作和制作。同时&#xff0c;St…

verilog编程题

verilog编程题 文章目录 verilog编程题序列检测电路&#xff08;状态机实现&#xff09;分频电路计数器译码器选择器加减器触发器寄存器 序列检测电路&#xff08;状态机实现&#xff09; module Detect_101(input clk,input rst_n,input data,o…

高防云主机安全解决方案

全球防护 高防云服务器支持区域覆盖中国大陆和海外地区&#xff0c;包括北京、上海、广州和中国香港等地。通过组合DDoS高防包和对应地区的CVM资源&#xff0c;可提供T级的单地区防护能力。 稳定可靠 兼顾防护和性能&#xff0c;DDoS提供实时防护&#xff0c;清洗成功率达99…

vulnhub靶场之DC-8

一.环境搭建 1.靶场描述 DC-8 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. This challenge is a bit of a hybrid between being an actual challenge, and being a "proof of concept&quo…

【含完整代码】Java定时任务之xxl-job[超详细]

前言 个人博客&#xff1a;www.wdcdbd.com 在Java中使用定时任务是一件很常见的事情&#xff0c;比如使用定时任务在什么时间&#xff0c;什么时候&#xff0c;去发布一些信息&#xff0c;或者去查询一些日志等相关的代码。这时&#xff0c;我们就要开发定时任务这中功能来实现…