【连通块染色,双指针维护区间map,整除分块】CF616 CDE

news2024/12/23 23:56:48

Dashboard - Educational Codeforces Round 5 - Codeforces

C

题意:

思路:

经典的给格子染色,直接dfs染色就行,不要用并查集,虽然也能做但是不好写

然后对于每一个*,把周围的格子的颜色扔到set里去重统计就行

Code:

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=1e3+10;
const int mxe=1e6+10;

int N,M;
int idx=0;

int ans[mxn][mxn],a[mxn][mxn],mp[mxe],vis[mxn][mxn];
int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};

string s[mxn];

int F(int x,int y){
    return (x-1)*M+y;
}
bool check(int x,int y){
    return x>=1&&x<=N&&y>=1&&y<=M;
}
void dfs(int x,int y,int c){
    for(int i=0;i<4;i++){
        int vx=x+dx[i];
        int vy=y+dy[i];
        if(check(vx,vy)&&s[vx][vy]=='.'&&!a[vx][vy]){
            a[vx][vy]=c;
            mp[c]++;
            dfs(vx,vy,c);
        }
    }
}

void solve(){
    cin>>N>>M;
    for(int i=1;i<=N;i++){
        cin>>s[i];
        s[i]=" "+s[i];
    }
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            if(s[i][j]=='.'&&!a[i][j]){
                a[i][j]=++idx;
                mp[idx]++;
                dfs(i,j,idx);
            }
        }
    }
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            if(s[i][j]=='*'){
                set<int> S;
                for(int k=0;k<4;k++){
                    int vx=i+dx[k];
                    int vy=j+dy[k];
                    if(check(vx,vy)&&s[vx][vy]=='.'){
                        S.insert(a[vx][vy]);
                    }
                }
                int res=0;
                for(auto u:S){
                    res+=mp[u];
                }
                ans[i][j]=res;
            }
        }
    }
    for(int i=1;i<=N;i++){
        for(int j=1;j<=M;j++){
            if(s[i][j]=='.') cout<<".";
            else cout<<(ans[i][j]+1)%10;
        }
        cout<<'\n';
    }
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
	while(__--)solve();return 0;
}

 

D

题意:

思路:

很经典的双指针动态维护区间map,用set维护这个元素是否存在以及不同的种类个数,map维护每个元素的出现次数

Code:

#include <bits/stdc++.h>

//#define int long long

using namespace std;

const int mxn=5e5+10;
const int mxe=1e6+10;

int N,K;
int a[mxn],mp[mxe];

void solve(){
    cin>>N>>K;
    for(int i=1;i<=N;i++) cin>>a[i];
    int r=1;
    set<int> S;
    int ans=0,ansl=1,ansr=1;
    for(int l=1;l<=N;l++){
        while(r<=N){
            mp[a[r]]++;
            S.insert(a[r]);
            if(S.size()>K){
                mp[a[r]]--;
                if(!mp[a[r]]) S.erase(a[r]);
                break;
            }
            r++;
        }
        if(ans<r-1-l+1){
            ans=r-1-l+1;
            ansl=l;
            ansr=r-1;
        }
        mp[a[l]]--;
        if(!mp[a[l]]) S.erase(a[l]);
    }
    cout<<ansl<<" "<<ansr<<'\n';
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
	while(__--)solve();return 0;
}

E

题意:

思路:

整除分块板子

不懂的可以看这个:整除分块 - 知乎 

Code:

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=5e5+10;
const int mxe=1e6+10;
const int mod=1e9+7;

int N,M;

int ksm(int a,int b,int mod){
    int res=1ll;
    while(b){
        if(b&1) res=(res*a)%mod;
        a=(a*a)%mod;
        b>>=1;
    }
    return res;
}
void solve(){
    cin>>M>>N;
    int r=1;
    int ans=(N%mod)*(M%mod)%mod;
    int inv2=ksm(2,mod-2,mod);
    for(int l=1;l<=min(N,M);l=r+1){
        r=min(M/(M/l),N);
        ans=(ans-(M/l)%mod*((l+r)%mod)%mod*((r-l+1)%mod)%mod*inv2%mod)%mod;
    }
    cout<<(ans+mod)%mod<<'\n';
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int __=1;//cin>>__;
	while(__--)solve();return 0;
}

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

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

相关文章

什么叫做阻塞队列的有界和无界

问题描述 什么叫做阻塞队列的有界和无界&#xff1a; 解决方案&#xff1a; 1. 阻塞队列&#xff08;如图&#xff09;&#xff0c;是一种特殊的队列&#xff0c;它在普通队列的基础上提供了两个附加功能 a. 当队列为空的时候&#xff0c;获取队列中元素的消费者线程会被阻塞…

ChinaJoy 2023微星雷鸟17游戏本震撼发布:搭载AMD锐龙9 7945HX首发8499元

ChinaJoy 2023展会中微星笔记本再次给大家带来惊喜&#xff0c;发布了搭载AMD移动端16大核的旗舰游戏本&#xff1a;雷鸟17&#xff0c;更重要的这样一款旗舰性能的游戏本&#xff0c;首发价8499元堪称当今游戏本市场中的“性价比爆款”&#xff01; 本着和玩家一同制霸游戏战场…

leetcode 712. Minimum ASCII Delete Sum for Two Strings(字符串删除字母的ASCII码之和)

两个字符串s1, s2, 删除其中的字母使s1和s2相等。 问删除字母的最小ASCII码之和是多少。 思路&#xff1a; DP 先考虑极端的情况&#xff0c;s1为空&#xff0c;那么要想达到s2和s1相等&#xff0c;就要把s2中的字母删完&#xff0c; ASCII码之和就是s2中所有字母的ASCII码之…

大型集团企业一体化运维监控方案

当前&#xff0c;云计算、大数据、人工智能等IT技术迅猛发展&#xff0c;企业的信息化步入了一个崭新的时代&#xff0c;企业规模不断壮大&#xff0c;业务不断拓展&#xff0c;企业信息化依赖的网络结构和IT技术越来越复杂。企业运维部门采用的运维工具和技术实力直接决定企业…

算法训练营第五十七天||647.回文子串、516.最长回文子序列、动态规划总结

647.回文子串 出自代码随想录 如果大家做了很多这种子序列相关的题目&#xff0c;在定义dp数组的时候 很自然就会想题目求什么&#xff0c;我们就如何定义dp数组。 绝大多数题目确实是这样&#xff0c;不过本题如果我们定义&#xff0c;dp[i] 为 下标i结尾的字符串有 dp[i]个…

Cordova+Vue2.0打包apk,保姆教程来袭!

1.环境准备&#xff08;全部都需要配置环境变量&#xff09; java version "1.8.0_341" 安卓sdk android-29 Gradle 4.10.1 node v16.16.0 cordova 10.0.0 (cordova-lib10.1.0)2.安卓环境变量 1. 确认已安装 Android SDK Build-Tools 和 Android SDK Platform-Tool…

Sentaurus TCAD-Sdevice CV (电容特性)

File {grid "nnode|NMOS_msh.tdr" ## 输入包含掺杂信息的网格文件current "plot" ## 输出包含时间、电压和电流的_des.plt曲线文件&#xff0c;简称current plotplot "tdrdat" ## 输出包含掺杂浓度、电流密度、电势分布、电场分布…

使用redis-cli操作redis

redis-cli是原生redis自带的命令行工具&#xff0c;可以帮助我们通过简单的命令连接redis服务&#xff0c;并进行数据管理&#xff0c;即redis键&#xff08;key&#xff09;和redis数据结构的管理。 关于如何进入redis-cli命令行客户端&#xff0c;请查看文章&#xff1a;Redi…

android 如何分析应用的内存(十四)——jdb命令行

android 如何分析应用的内存&#xff08;十四&#xff09; 前面的系列文章介绍了android应用如何分析native内存。 接下来就是android应用如何分析java内存。同native一样&#xff0c;我们也希望能够看到 ART的堆和栈的情况&#xff0c;以及锁的情况&#xff0c;方法的本地变…

ChatFile实现相关流程

文本上传构建向量库后台库的内容 调用上传文件接口先上传文件 存在疑问:暂时是把文件保存在tmp文件夹,定时清理,是否使用云存储 根据不同的文件类型选取不同的文件加载器加载文件内容 switch (file.mimetype) {case application/pdf:loader new PDFLoader(file.path)breakc…

爬虫教程1_Xpath 入门教程

Xpath 入门教程 在编写爬虫程序的过程中提取信息是非常重要的环节&#xff0c;但是有时使用正则表达式无法匹配到想要的信息&#xff0c;或者书写起来非常麻烦&#xff0c;此时就需要用另外一种数据解析方法&#xff0c;也就是本节要介绍的 Xpath 表达式。 Xpath表达式 XPath…

Linux(centos7)如何实现配置iscsi存储多路径 及DM-Multipath的配置文件概述

安装多路径软件&#xff08;系统默认安装&#xff09; #第一&#xff1a;安装多路径软件yum -y install device-mapper device-mapper-multipath#第二&#xff1a;在CentOS7中启用多路径模块&#xff0c;mpathconf命令及相关模块加载&#xff08;可以使用mpathconf -h查看用法&…

RocketMQ 在业务消息场景的优势详解

作者&#xff1a;隆基 01 消息场景 RocketMQ 5.0 是消息事件流一体的实时数据处理平台&#xff0c;是业务消息领域的事实标准&#xff0c;很多互联网公司在业务消息场景会使用 RocketMQ。 我们反复提到的“消息、业务消息”&#xff0c;指的是分布式应用解耦&#xff0c;是 R…

史上最全,性能测试-性能分析调优详细讲解,全网独一份...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能分析 前提&a…

中国AI大模型峰会“封神之作” - 开发者不容错过这场夏季盛会

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【AI模型系列】中国AI大模型峰会“封神之作”,不容错过的大模型机遇

目录 序言 峰会介绍 现场大咖 大语言模型 五大论坛 峰会特点 参与方式 方式一 方式二 序言 AI大模型是指具有数十亿个参数的深度学习模型。这些模型通常使用多层神经网络来处理大规模的数据集&#xff0c;以学习和提高它们的表现。 大模型通常需要大量的计算资源和…

three.js实现vr全景图

方法: 可以利用Threejs中的立方体或者球体实现全景图功能&#xff0c;把立方体或球体当成天空盒子&#xff0c;将无缝衔接的图片贴上&#xff0c;看起来就像在一个场景中&#xff0c;相机一般放置在中央。 three.js中文网 1、立方体实现 立方体6个面要贴上6个方向的图片&…

GFS 分布式文件系统

GFS 分布式文件系统 一.GlusterFS 概述 1.GlusterFS简介 &#xff08;1&#xff09;开源的分布式文件系统。 &#xff08;2&#xff09;由存储服务器、客户端以及NFS/Samba 存储网关&#xff08;可选&#xff0c;根据需要选择使用&#xff09;组成。 &#xff08;3&#x…

css3 hover border 流动效果

/* Hover 边线流动 */.hoverDrawLine {border: 0 !important;position: relative;border-radius: 5px;--border-color: #60daaa; } .hoverDrawLine::before, .hoverDrawLine::after {box-sizing: border-box;content: ;position: absolute;border: 2px solid transparent;borde…

常用的统计分析方法

统计方法是指有关收集、整理、分析和解释统计数据&#xff0c;并对其所反映的问题作出一定结论的方法。统计方法是一种从微观结构上来研究物质的宏观性质及其规律的独特的方法。统计方法是适用于所有学科领域的通用数据分析方法&#xff0c;只要有数据的地方就会用到统计方法。…