(AtCoder Beginner Contest 330) 题解

一、前言

有一次做出 6 6 6 道题,痴心妄想 梦想能够稳定 6 6 6 题。

二、题解

言归正传,开始讲题。

第 A 题 Buildings

很简单的一道题,按照模拟即可。——有趣的东西:我为什么吃罚时?因为 y d yd yd 翻译出锅了。(把"左边数第一个"翻译成"左边的一个")

代码:

#include <bits/stdc++.h>
using namespace std;
int a[110];
int main(){
	int n; cin>>n;
	for (int i=1; i<=n; i++){
		cin>>a[i];
		if (i!=1&&a[i]>a[1]){
			cout<<i; return 0;
		}
	}cout<<-1;
} 

第 B 题 AtCoder Amusement Park

也是一道语法题。可以设定 s u m sum sum 为当前排队人数。如果剩余座位不够,就清空,然后在加上人数即可。

代码:

#include <bits/stdc++.h>
using namespace std;
int sum=0,cnt=0;
int main(){
	int n,x,k; cin>>n>>k;
	while (n--){
		cin>>x; //cout<<sum<<"\n";
		if (sum+x>k) sum=0,cnt++;
		sum+=x;
	}cout<<cnt+1;
} 

第 C 题 Sigma Problem

题目说 不要对答案取余

我们可以发现:答案是所有任意两个数加起来的和 - 需要取余的数对数 × 1 0 8 \times10^8 ×108

可以使用二分或双指针解决问题。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[300010],n;
signed main(){
	cin>>n; int sum=0;
	for (int i=1; i<=n; i++) cin>>a[i]; 
	sort(a+1,a+n+1);
	int r=n+1,ans=0;
	for (int l=1; l<=n; l++){
		if (l>=r) r++;
		while (l<r-1&&a[l]+a[r-1]>=100000000) r--;
		ans-=100000000*(n-r+1); ans+=a[l]*(l-1)+sum; sum+=a[l];
	}cout<<ans;
} 

第 D 题 Another Sigma Problem

又一个求和问题(下面左边的加法表示拼接)。

A + B = A × l o g 10 B + B A+B=A\times log_{10}B+B A+B=A×log10B+B

可以使用前缀和解决问题。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 998244353
int a[300010],n;
int ask(int x){
	int ans=1;
	while (x) x/=10,ans*=10;
	return ans;
}signed main(){
	cin>>n; int sum=0,ans=0,sumx=0;
	for (int i=1; i<=n; i++) cin>>a[i]; 
	for (int i=n; i>=1; i--){
		ans=(ans+sum+sumx*a[i]%mod)%mod;
		sum+=a[i]; sumx+=ask(a[i]);
		sum%=mod; sumx%=mod;
	}cout<<ans;
} 

第 E 题 Yet Another Sigma Problem

又双叒叕是一道求和问题。

我们可以把一个长度为 5 5 5 的共同最长前缀拆成 5 5 5 个共同前缀(前缀的前缀还是前缀)。

如何求共同前缀的个数?可以使用 M a p Map Map 记录前缀字符串。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
string s[300010];
map <string,int> mp;
signed main(){
	int n,ans=0; cin>>n;
	for (int i=1; i<=n; i++){
		cin>>s[i]; string now="";
		for (int j=0; j<s[i].size(); j++){
			now.push_back(s[i][j]);
			ans+=mp[now]; mp[now]++;
		}
	}cout<<ans;
} 

TLE!怎么办?

智商不够,数据结构来凑!

M a p Map Map 挂掉了,看来只有 T r i e Trie Trie 了!(详见算法笔记)

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
string s[300010];
int tr[300010][26],tot;
int num[300010];
signed main(){
	int n,ans=0; cin>>n;
	for (int i=1; i<=n; i++){
		cin>>s[i]; int id=0;
		for (int j=0; j<s[i].size(); j++){
			int to=s[i][j]-'a';
			if (!tr[id][to]){
				tr[id][to]=++tot;
			}id=tr[id][to];
			ans+=num[id]; num[id]++;
		}
	}cout<<ans;
} 

第 G 题 Merchant Takahashi

题目说,有 n n n 次活动,每次活动都在一个点上举行。参加活动会赚钱,移动到相邻的点会花路费。

可以使用 D p Dp Dp

int dp[i];//dp[i]表示在i点最多能赚到多少钱

d p i = d p j + w j − ∣ i − j ∣ × c dp_{i}=dp_{j}+w_{j}-|i-j|\times c dpi=dpj+wjij×c

很显然,超时。那么可以使用线段树进行优化。

代码:

#include <bits/stdc++.h>
using namespace std;
#define mid (l+r)/2
#define ls(n) 2*n
#define rs(n) 2*n+1
#define int long long
int a[800010],b[800010],m;
struct Seg_tree{
	void change(int now){
		a[now]=max(a[ls(now)],a[rs(now)]);
		b[now]=max(b[ls(now)],b[rs(now)]);
	}void update(int now,int l,int r,int id,int val){
		if (l==r){
			a[now]=val+id*m,b[now]=val-id*m; 
			return ;
		} if (id<=mid) update(ls(now),l,mid,id,val);
		else update(rs(now),mid+1,r,id,val);
		change(now);
	}int query1(int now,int l,int r,int ql,int qr){
		if (ql<=l&&r<=qr) return a[now];
		if (qr<=mid) return query1(ls(now),l,mid,ql,qr);
		if (ql>mid) return query1(rs(now),mid+1,r,ql,qr);
		return max(query1(ls(now),l,mid,ql,mid),query1(rs(now),mid+1,r,mid+1,qr));
	}int query2(int now,int l,int r,int ql,int qr){
		if (ql<=l&&r<=qr) return b[now];
		if (qr<=mid) return query2(ls(now),l,mid,ql,qr);
		if (ql>mid) return query2(rs(now),mid+1,r,ql,qr);
		return max(query2(ls(now),l,mid,ql,mid),query2(rs(now),mid+1,r,mid+1,qr));
	}
}t; 
signed main(){
	int n,k,mx=0; cin>>n>>m>>k;
	for (int i=1; i<=n; i++) t.update(1,1,n,i,-(i-1)*m);
	for (int i=1; i<=k; i++){
		int id,k; cin>>id>>k;
		int l=max(1ll,id-k/m),r=min(n,id+k/m);
		int num=max(t.query1(1,1,n,1,id)-id*m,t.query2(1,1,n,id,n)+id*m)+k;
		t.update(1,1,n,id,num); mx=max(mx,num);
	}cout<<mx;
	return 0;
}

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

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

相关文章

HNU-操作系统OS-2024期中考试

前言 该卷为22计科/智能OS期中考卷。 感谢智能22毕宿同学记忆了考卷考题。 同学评价&#xff1a;总体简单&#xff1b;第1&#xff0c;7概念题较难需要看书&#xff1b;第4&#xff0c;5题原题。 欢迎同学分享答案。 【1】共10分 操作系统的设计目标有哪些&#xff1f; 【…

Attention-guided Feature Distillation for Semantic Segmentation

摘要 与现有的复杂方法相比&#xff0c;该方法通常用于从老师那里提取知识给学生&#xff0c;该方法展示了一种简单而强大的方法&#xff0c;可以利用精细的特征映射来转移注意力。事实证明&#xff0c;该方法在提取丰富信息方面是有效的&#xff0c;在作为密集预测任务的语义…

springfox.documentation.spi.DocumentationType没有OAS_30(从swagger2转到swagger3出现的问题)

直接开讲&#xff1a; 查看源码根本没有OAS_30的类型选择 右键package的springfox找到maven下载的包&#xff0c;打开到资源管理器 可以看到项目优先使用2版本的jar包&#xff0c;但是OAS_30只在3版本中才有&#xff0c;意思就是让项目优先使用以下图片中的3.0.0jar包 解决办法…

智能文件夹改名助手:一键秒级恢复原始名称,轻松告别繁琐操作,提升文件管理效率

文件夹管理成为了我们日常工作和生活中不可或缺的一部分。然而&#xff0c;随着文件数量的不断增加和文件夹命名的复杂性&#xff0c;我们经常面临着重命名文件夹的繁琐操作。你是否曾经因为误改文件夹名称而头疼不已&#xff1f;是否曾经为了找回原始名称而耗费大量时间&#…

docker容器实现https访问

前言&#xff1a; 【云原生】docker容器实现https访问_docker ssl访问-CSDN博客 一术语介绍 ①key 私钥 明文--自己生成&#xff08;genrsa &#xff09; ②csr 公钥 由私钥生成 ③crt 证书 公钥 签名&#xff08;自签名或者由CA签名&#xff09; ④证书&#xf…

【Java】:向上转型、向下转型和ClassCastException异常

目录 先用一个生动形象的例子来解释向上转型和向下转型 向上转型&#xff08;Upcasting&#xff09; 向下转型&#xff08;Downcasting&#xff09; 向上转型 概念 例子 发生向上转型的情况 1.子类对象赋值给父类引用 2.方法参数传递 3.返回值 向下转型 概念 注意…

SpringSecurity的核心原理使用总结

1. SpringSecurity的核心原理 对于最原始Servlet请求处理的层次结构 客户端->过滤器链->Servlet 对于在SpringMVC中处理请求的层次结构 如何让Filter与Spring建立连接呢? 因此它增加了一个DelegatingFilterProxy 它是SpringMVC提供的的Filter,它内部代理了一个原生的F…

代码随想录——二叉树的层序遍历(Leetcode102)二叉树层序遍历的模板

题目链接 层序遍历&#xff08;队列&#xff09; 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现&#xff0c;队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用…

java项目之企业OA管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的企业OA管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 企业OA管理系统的主要使用…

搭建Springboot的基础开发框架-02

本系列专题虽然是按教学的深度来定稿的&#xff0c;但在项目结构和代码组织方面是按公司系统的要求来书定的。在本章中主要介绍下基础开发框架的功能。后续所有章节的项目全是在本基础框架的基础上演进的。 工程结构介绍 SpringbootSeries&#xff1a;父工程&#xff0c;定义一…

语言:C#

一、VSCode生成exe 二、

【计算机毕业设计】基于微信小程序校园服务平台

随着 计算机技术的成熟&#xff0c;互联网的建立&#xff0c;如今&#xff0c;PC平台上有许多关于校园服务方面的应用程序&#xff0c;但由于使用时间和地点上的限制&#xff0c;用户在使用上存在着种种不方便&#xff0c;而开发一款基于微信小程序的校园服务平台&#xff0c;能…

Loongnix系统替换内核操作

Loongnix系统替换内核操作 一、终端下执行命令 sudo apt search linux-image* 返回结果中格式如: linux-image-4.19.0-19-loongson-3 为最新的内核源码。 二、下载内核源码包 sudo apt source linux-image-4.19.0-19-loongson-3 如提示&#xff1a;E: 您必须在 sources.li…

文件系统(未打开的文件)

之前我们讲述的一些文件操作都是在文件被打开的基础上的&#xff0c;因为用户想要对某个文件做操作的话&#xff0c;这个文件一定是被打开的&#xff0c;也就是一定是内存级的文件。 但是有的没有被操作的文件&#xff0c;是在磁盘中的&#xff0c;我们的笔记本是在SSD中&…

红米K60Pro/K50/K40系列澎湃OS解锁BL降级出厂MIUI14稳定版本方法

最新红米K60/60pro/K50/K50至尊/K40等多个系列手机都已经推送了澎湃OS系统&#xff0c;但新版的系统适配周期短或者等其他原因&#xff0c;导致很多小伙伴希望降级回到MIUI14系统&#xff0c;多个小米售后都拒绝降级服务&#xff0c;并且官方也没有开通1个自助降级的方法&#…

rt-thread 挂载romfs与ramfs

参考&#xff1a; https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/qemu-network/filesystems/filesystems?id%e4%bd%bf%e7%94%a8-romfs https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutor…

AI回答总不满意?你的提问方式可能完全错误!

大家好&#xff0c;我是卷福同学&#xff0c;一个专注AI大模型整活的前阿里程序员&#xff0c;腾讯云社区2023新秀突破作者 向AI提问想写一篇论文&#xff0c;结果AI就生成2000字左右的文章后就完了。小伙伴们是不是也会遇到这类情况呢。今天来教大家AI提示词的技巧&#xff0c…

FANUC机器人故障诊断—报警代码(五)

FANUC机器人故障诊断中关于报警代码的介绍更新如下&#xff1a; 一、报警代码&#xff08;SRVO-214&#xff09; SRVO-214 6轴放大器保险丝熔断 [原因]6轴伺服放大器上的保险丝(FS2,FS3)已熔断。括号内的数字表示在第几台6轴伺服放大器上检测出了保险丝熔断。 [对策] 1.保险…

实现字符串比较函数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i, result;char s1[100], s2[100];//填充数组&#xff1b;printf("请输入数组s1的…

java线程局部变量使用方式

线程局部变量是Java中用于存储线程本地信息的变量。这种变量仅在线程的生命周期内存在&#xff0c;并且每个线程都有自己的一份拷贝。换句话说&#xff0c;线程局部变量是线程私有的&#xff0c;其他线程无法访问。 使用场景主要包括&#xff1a; 1. 存储线程状态信息&#xff…