Codeforces Round 496 (Div. 3)

目录

A. Tanya and Stairways

B. Delete from the Left

C. Summarize to the Power of Two

D. Polycarp and Div 3

E. Median on Segments 

F. Berland and the Shortest Paths


A. Tanya and Stairways

简单性质题

我们找到性质,如果这个数大于等于后面的数就是到结尾了,特例就是i==n

void solve(){
   
    cin>>n;
    vector<int> a(n+1);
    for(int i=1;i<=n;i++) cin>>a[i];
    vector<int> res;
    for(int i=1;i<=n;i++){
    	if(a[i]>=a[i+1] || i==n){
    		res.push_back(a[i]);
    	}
    }
    cout<<res.size()<<endl;
    for(auto&v:res) cout<<v<<' ';
    cout<<endl;
    return ;
}

B. Delete from the Left

简单性质

按照题目意思是从左边开始删除直到后面的全都相等为止,所以我们可以考虑直接倒着来直到不想等就是需要删除到的位置,如果一个都跑完了还没有结果,答案就是长的砍掉多的一节

void solve(){
   
    string a,b; cin>>a>>b;
    n=a.size(),m=b.size();
    a=' '+a,b=' '+b;
    for(int i=n,j=m;i>=1&& j>=1;i--,j--){
    	if(a[i]!=b[j]){
    		cout<<i+j<<endl;
    		return ;
    	}
    }
    cout<<max(n,m)-min(n,m)<<endl;
    return ;
}

C. Summarize to the Power of Two

题目是判断是否是存在2的幂次,可以简单得到对于x如果y是对应数,那么对于y,x也是他的对应数

所以可以把所有的数都加入其中然后判断他是否有满足的对应数(同时特判同一种数且数量为1)

void solve(){
   
    cin>>n;
    map<LL,int> mp;
    for(int i=1;i<=n;i++){
    	LL x; cin>>x;
    	mp[x]++;
    }
    int ans=0;
    for(auto&[v,w]:mp){
    	bool ok=false;
    	for(int j=1;j<=32;j++){
    		LL x=1ll<<j;
    		if(x<=v) continue;
    		if(mp.count(x-v)){
    			if(x-v==v && w==1) continue;
    			else ok=true;
    		}
    	}
    	ans+= !ok ? w : 0;
    }
    cout<<ans<<endl;
    return ;
}

D. Polycarp and Div 3

对数切割使其变成最多3的倍数,我们明显发现如果是3的倍数直接切割就行,如果从前到后判断是不是出现了3的倍数呢?只要是前面出现的余数此时又出现就是或者说当前余数变为了0那也是,由此可以推广为任意的数的倍数的公式

void solve(){
   
    string s;
    map<int,int> mp;
    cin>>s;
    int ans=0,m=3,res=0;
    for(auto&v:s){
        ans=ans+(v-'0');
        ans%=3;
        if(mp.count(ans) || !ans){
            res++;
            ans=0;
            mp.clear();
        }
        else mp[ans]++;
    }
    cout<<res<<endl;
    return ;
}

E. Median on Segments 

我们对于求解满足要求的区间数量首先分析,要求是恰好中位数是m的区间数,如果直接求解这样的区间数量是难以解决的,但是我们利用前缀和的思维我们可以简单求解出中位数大于等于m的区间个数,[l,r]对于这个区间只要cnt_{r>=m}-cnt_{r<m} > cnt_{l>=m}-cnt_{l<m}即可求解出符合的区间要求对于前缀和维护同时求解方案数可以使用树状数组来求解,对于题目要求转化为

中位数>=m的区间数-中位数>=m+1的区间数,同属对于这个问题的求解如上

struct BIT{
    int tr[N];
    void add(int k,int x){
        for(int i=k;i<=2*n;i+=lowbit(i)) tr[i]+=x;
    }
    int query(int k){
        int res=0;
        for(int i=k;i;i-=lowbit(i)) res+=tr[i];
        return res;
    }
    int ask(int l,int r){// 先左再右
        return query(r)-query(l-1); 
    }
    void clear(){
        for(int i=0;i<=2*n+2;i++) tr[i]=0;
    }
}tree;
int work(int x){
	tree.clear();
	vector<int> c1(n+1),c2(n+1);
	
	int ans = 0;
	tree.add(n+1,1);// 表示 0的位置
	
	for(int i=1;i<=n;i++){
		c1[i]=c1[i-1],c2[i]=c2[i-1];
		if(a[i]>=x) c1[i]++;
		else c2[i]++;
		ans+=tree.query(c1[i]-c2[i]+n); // 表示查询小于等于差值的位置
		tree.add(c1[i]-c2[i]+n+1,1);
	}
	return ans;
}
void solve()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
	
	work(m);
	
	cout<<work(m)-work(m+1)<<endl;
	// 我要求的是以m为中位数的方案的数量
	// 等价于以>=m为中位数的方案 - >=m+1 为中位数的方案
	    
    return ;
}

F. Berland and the Shortest Paths

最短路径树,我们可以直接按照dijkstra的方式求解即可因为我们要的是根节点到其他的点的路径的最小值,所以不同于最小生成树,同时考虑存起来每一个点的前驱节点

void add(int a,int b){
	e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
 
vector<int> pre[N];
 
void solve()
{
	memset(h,-1,sizeof h);
    cin>>n>>m>>k;
	for(int i=1;i<=m;i++){
		int a,b; cin>>a>>b;
		add(a,b);
		add(b,a);
	}        
	
	auto bfs = [&](){
		memset(d,0x3f,sizeof d);
		queue<int> q;
		q.push(1); d[1]=0;
		while(!q.empty()){
			int u=q.front(); q.pop();
			for(int i=h[u];~i;i=ne[i]){
				int j=e[i];
				if(d[j]>d[u]+1){
					d[j]=d[u]+1;
					pre[j].push_back((i+1)/2);
					q.push(j);
				}
				else if(d[j]==d[u]+1){
					pre[j].push_back((i+1)/2);
				}
			}
		}
	};
	
	bfs();
	
	int ans=1;
	for(int i=2;i<=n;i++){
		ans*=pre[i].size();
		if(ans>k){
			ans=k;
			break;
		}
	}
	cout<<ans<<endl;
	
	vector<int> vis(m+1,0);
	
	function<void(int)> dfs = [&](int x){
		
		if(x==n+1){
			for(int i=1;i<=m;i++){
				cout<<vis[i];
			}
			cout<<endl;
			ans--;
			if(!ans) exit(0);
			return ;
		}
		for(auto&v:pre[x]){
			vis[v]=1;
			dfs(x+1);
			vis[v]=0;
		}
		return ;
	};
	
	dfs(2);
    return ;
}

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

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

相关文章

网工内推 | 云计算工程师,HCIE认证优先,最高18k*14薪

01 杭州中港科技有限公司 招聘岗位&#xff1a;云计算工程师 职责描述&#xff1a; 1、承担云计算相关工程交付、业务上云及售前测试&#xff0c;从事虚拟化、桌面云、存储、服务器、数据中心、大数据、相关产品的工程项目交付或协助项目交付。 2、承担云计算维护工程师职责&…

mac安装rust开发环境,使用brew安装和全局配置

mac下使用brew可以一键安装环境&#xff1a; brew install rustup 安装完成执行&#xff1a; rustup-init 按照提示配置即可&#xff1a; 出现&#xff1a; 想要全局生效&#xff1a; echo export PATH"$HOME/.cargo/bin:$PATH" >> ~/.bash_profile source…

代码随想录算法训练营第day53|1143.最长公共子序列 、 1035.不相交的线、 53. 最大子序和 动态规划

目录 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 1143.最长公共子序列 力扣题目链接(opens new window) 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原…

Windows 设置多显示器显示

Windows 设置多显示器显示 1. Windows 7 设置 HDMI 输出2. Windows 11 设置多显示器显示References 1. Windows 7 设置 HDMI 输出 2. Windows 11 设置多显示器显示 ​​​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

深度学习_20_卷积中的填充与步幅

如果图片本身比较小&#xff0c;卷积之后输出也会很小&#xff0c;那么可以在图片与卷积核相乘之前先填充一下&#xff0c;让输出为预期大小 一般填充后输入&#xff0c;输出相同 当图片比较大的时候&#xff0c;如果利用卷积核去得到我们想要的大小的话&#xff0c;得用到多层…

javaSwing日记管理系统

一、简介 使用 Java Swing 开发日记管理系统 在今天的博客中&#xff0c;我将向您介绍如何使用 Java Swing 开发一个简单而功能强大的日记管理系统。这个系统将具有登录、注册、找回密码、写日志以及切换主题等功能。我们将使用 MySQL 数据库来存储用户信息和日记内容。 二、…

ShardingSphere+JPA+Druid实现分表操作

要在SpringBoot项目中实现分表操作&#xff0c;本文使用的是ShardingSphereJPADruid实现。过程中出现问题记录一下。 准备MySQL数据库表 这里准备的是一张主表test_cost&#xff0c;两张从表test_cost_0和test_cost_1&#xff0c;结构需要相同&#xff0c;主表只是声明了表结构…

python异常:pythonIOError异常python打开文件异常

1.python读取不存在的文件时&#xff0c;抛出异常 通过 open()方法以读“r”的方式打开一个 abc.txt 的文件&#xff08;该文件不存在&#xff09;&#xff0c;执行 open()打开一个不存在的文件时会抛 IOError 异常&#xff0c;通过 Python 所提供的 try...except...语句来接收…

基于springBoot 整合JavaMail的网站邮件通知功能实现

JDK版本&#xff1a;jdk17 IDEA版本&#xff1a;IntelliJ IDEA 2022.1.3 SpringBoot 版本&#xff1a;v2.5.7 文章目录 一、关于邮件发送的基本概念1.1 邮件发送1.1.1 SMTP协议 1.2 邮件接收1.2.1 POP3协议1.2.2 IMAP协议 二、准备工作2.1 注册邮箱2.1 获取登录授权码 三、开发…

走进jvm之垃圾回收器篇

这里我想首先说明一下&#xff0c;虽然我们经常会拿垃圾回收器来做比较&#xff0c;虽然想挑选一个最好的收集器出来&#xff0c;但是目前也没有说哪一款收集器是完美的&#xff0c;更不存在万能的收集器&#xff0c;我们也只是对收集器选择最适合场景的一个收集器。 那么作者将…

Springboot+Vue前后端分离的在线图书商城(书城)系统

项目介绍 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本图书商城管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

UE snap02 解析ASCII文本文件

UE snap02 解析ASCII文本文件 示例数据data.dat 11389477.2714892 3364559.73645693 0 11389471.5162524 3364567.8860295 0 11389471.5162524 3365813.09618369 0 11388329.6082659 3366184.85895869 0 11388320.4775297 3366197.78833087 0 11388270.6882384 3366214.84811…

OpenAI Sora文生视频模型技术报告中英全文

Video generation models as world simulators 视频生成模型作为世界模拟器 We explore large-scale training of generative models on video data. Specifically, we train text-conditional diffusion models jointly on videos and images of variable durations, resolu…

jQuery 元素操作

文章目录 1. jQuery 样式操作1.1 操作 css 方法1.2 设置类样式方法*案例--tab栏切换 1.3 类操作和className 区别 2. jQuery 效果2.1 显示隐藏效果2.2 滑动效果事件切换动画队列及其停止排队方法 3.3 淡入淡出效果利用渐进方式调整透明度*案例--高亮突出显示 3.4 自定义动画 an…

国务院办公厅发布:政府类网站网页设计规范(试行)

国务院办公厅于2019年12月发布了《政府类网站网页设计规范&#xff08;试行&#xff09;》。该规范的发布旨在统一政府类网站的设计风格和标准&#xff0c;提升政府网站的用户体验和可访问性&#xff0c;推动政府信息公开和服务的提升。 该规范涵盖了政府类网站的各个方面&…

Java IO流(超详细!)上篇

目录 一、File类1、操作文件和目录 二、I/O流概述1、按流向划分&#xff1a;输入流和输出流2、按处理单元划分&#xff1a;字节流和字符流3、按流的角色划分&#xff1a;节点流和处理流 三、字节流1、字节输出流基类&#xff1a;OutputStream2、字节输出流FileOutputStream类3、…

未来已来?国内10家AI大模型盘点(附体验网址)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、阿里云——通义千问2、科大讯飞——星火大模…

全局过滤器实现Jwt校验

从Session到Jwt 之前我写过一篇 什么是 httpsession &#xff1a; 理解HttpSession 在经典的那个登录场景中&#xff1a; 客户端第一次访问的时候 需要登录 登录成功之后 后面再次访问的时候 为了让服务器认识 这是已经登录成功的我 在session中存储的用户的信息。 现在我…

【leetcode】628.三个数的最大乘积

前言&#xff1a;剑指offer刷题系列 问题&#xff1a; 给你一个整型数组 nums &#xff0c;在数组中找出由三个数组成的最大乘积&#xff0c;并输出这个乘积。 示例&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;6思路1&#xff1a; 先去计算输入列表 nums …

蓝桥杯刷题(十三)

1.煤球数目 代码 cnt ans 0 start 1 a [] while cnt<100:ansstartstart 1t ansstartcnt1a.append(ans) print(sum(a))2.奖券数目 代码 def f(x)->bool:while x:if x%104:return Falsex//10return True ans 0 for i in range(10000,100000):if f(i):ans1 print(a…