AC修炼计划(AtCoder Beginner Contest 328)

传送门:

Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328) - AtCoder

本章对于自己的提升:dfs的运用,带权并查集,以及状压dp。

A,B,C题比较简单,直接附上代码。

A - Not Too Hard

// #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;
int b[1000005];
int n,x;
void icealsoheat(){cin>>n>>x;int ans=0;for(int i=1;i<=n;i++)cin>>b[i];for(int i=1;i<=n;i++){ans+=b[i]<=x?b[i]:0ll;}cout<<ans;
}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

B - 11/11

// #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;
int b[1000005];
int n,x;
void icealsoheat(){cin>>n;int ans=0;for(int i=1;i<=n;i++)cin>>b[i];for(int i=1;i<=n;i++){// if(b[i]>=i)ans++;int x=i%10;int an=i;bool f=0;while(an){if(an%10!=x){f=1;break;}an/=10;}if(f)continue;int bn=x;while(b[i]>=bn){ans++;bn=bn*10+x;}}cout<<ans;
}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

C - Consecutive

// #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;
int b[1000005];
int n,q;
string s;
int sum[1000005];
void icealsoheat(){cin>>n>>q;cin>>s;s=' '+s;for(int i=2;i<=n;i++){if(s[i]==s[i-1]){sum[i]=sum[i-1]+1;}else sum[i]=sum[i-1];}while(q--){int l,r;cin>>l>>r;int ans=sum[r]-sum[l-1];if(s[l]>1&&s[l]==s[l-1]){ans--;}cout<<ans<<"\n";}
}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

D - Take ABC

// #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;
// int b[1000005];
int n,q;
string s;
int sum[1000005];
void icealsoheat(){string s;cin>>s;vector<char>b;for(auto i:s){if(i!='C'||b.size()<2){b.push_back(i);}else{int id=b.size();if(b[id-1]=='B'&&b[id-2]=='A'){b.pop_back();b.pop_back();}else{b.push_back(i);}}}for(auto i:b){cout<<i;}}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

E - Modulo MST

这题要求是找边权经行取模后的(注意是取模后的数值)最小的最小生成树。此处的边的数量就未必是n-1了。我们需要用dfs把所有可能都跑一遍,并找到能把所有点能链接的最小生成树的最小的边权。(我没有想到会用这么暴力的写法,时间复杂度计算有待提高,赛时没有做出来)。在这里偷了jiangly的并查集板子。并查集用于查询到底有多少个点被取到了。应为他把并查集用了一个结构体进行递归,所以使得他的并查集可以迭代,很巧妙。

// #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;int u[1000005];
int v[1000005];
int w[1000005];
struct DSU {std::vector<int> f, siz;DSU() {}DSU(int n) {init(n);}void init(int n) {f.resize(n);std::iota(f.begin(), f.end(), 0);// for(int i=1;i<=n;i++)f[i]=i;siz.assign(n, 1);}int find(int x) {while (x != f[x]) {x = f[x] = f[f[x]];}return x;}bool same(int x, int y) {return find(x) == find(y);}bool merge(int x, int y) {x = find(x);y = find(y);if (x == y) {return false;}siz[x] += siz[y];f[y] = x;return true;}int size(int x) {return siz[find(x)];}
};
int n,m,k;
void icealsoheat(){cin>>n>>m>>k;for(int i=1;i<=m;i++){cin>>u[i]>>v[i]>>w[i];}int ans=k;auto dfs=[&](auto self,int i,DSU dsu,int s)->void{if(i==m+1){bool f=0;for(int i=1;i<=n;i++){if(!dsu.same(i,1)){f=1;break;}}if(!f)ans=min(ans,s%k);return;}self(self,i+1,dsu,s);if(!dsu.same(u[i],v[i])){dsu.merge(u[i],v[i]);self(self,i+1,dsu,s+w[i]);}};dfs(dfs,1,DSU(n+5),0);cout<<ans;}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

F - Good Set Query

这题是一道很典型的带权并查集的板子题,但我当时带权并查集忘却了,这里让我查漏补缺了。

代码如下:

// #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;
int n,q;
int w[1000005];
int pre[1000005];
// int a[1000005];
int find(int x){if(x==pre[x])return x;int t=pre[x];pre[x]=find(pre[x]);w[x]+=w[t];// pre[x]=find(pre[x]);return pre[x];}void icealsoheat(){cin>>n>>q;for(int i=1;i<=n;i++)pre[i]=i;for(int i=1;i<=q;i++){int a,b,d;cin>>a>>b>>d;int xx=find(a);int yy=find(b);if(xx==yy&&w[a]-w[b]==d)cout<<i<<" ";else if(xx!=yy){pre[yy]=xx;w[yy]+=w[a]-d-w[b];cout<<i<<" ";}}}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

G - Cut and Reorder

这题题目没看懂啥意思。

这里我看了大佬的题解Toyota Programming Contest 2023#7(AtCoder Beginner Contest 328) - 知乎 (zhihu.com)

这个数据一看到n<=22,就该第一时间想到,这很状压,但我思维太过浅薄,没有想到如何迭代状态。看了佬的题解才明白。

代码如下:

// #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;
int n,c;
int a[10005];
int b[10005];
void icealsoheat(){cin>>n>>c;for(int i=0;i<n;i++)cin>>a[i];for(int i=0;i<n;i++)cin>>b[i];vector<int>dp((1<<n)+5,0x3f3f3f3f3f3f3f3f);dp[0]=-c;for(int i=0;i<(1<<n);i++){int cnt=__builtin_popcount(i);for(int j=0;j<n;j++){if(!(i>>j&1)){int k=j;int sum=0;int ns=i;int id=0;while(k<n&&!(i>>k&1)&&cnt+id<n){ns|=(1ll<<k);sum+=abs(a[k]-b[cnt+id]);id++;k++;// ns|=(1ll<<k);dp[ns]=min(dp[ns],dp[i]+sum+c);}}}}cout<<dp[(1<<n)-1];}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

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

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

相关文章

虚拟机配置完NAT模式之后可以和主机ping通但是ping 百度显示:网络不可达

具体linux网络配置看这&#xff1a;http://t.csdnimg.cn/KRami 解决方案如下&#xff1a; 如果这里网关为空&#xff0c;那么和我遇到的问题一样网关没有设置上&#xff0c;在这直接配置网关之后重启即可

【Spring Boot】如何自定义序列化以及反序列器

在我们使用默认的消息转换器&#xff0c;将java的Long类型通过json数据传输到前端JS时&#xff0c;会导致Long类型的精度丢失&#xff0c;这是因为JS处理Long类型数字只能精确到前16位&#xff0c;所以我们可以采用自定义序列化方式将Long类型数据统一转为String字符串&#xf…

windows10关闭自动更新

windows10关闭自动更新 下载策略组改配置组配置 下载策略组 我自己的电脑里没有这个文件gpedit.msc所以要下载 pushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txtdir /b C:\Windows…

【算法基础】高精度运算

文章目录 高精度加法高精度减法高精度乘法高精度除法 高精度加法 主要思路就是利用编程模拟人工的加法 方便操作使用vector来存储这些数 为了方便进位&#xff0c;需要将原数字倒过来存储到vector中 加完所有位之后别忘了判断最后一位的进位 最后需要将vector中的数倒着输出 …

机器学习算法项目开发流程

机器学习算法是当今人工智能领域最重要的技术之一&#xff0c;它可以让计算机通过学习数据中的模式和规律来实现预测和决策。在实际应用中&#xff0c;开发一个成功的机器学习算法项目需要遵循一定的开发流程。本文将介绍一个常见的机器学习算法项目开发流程&#xff0c;帮助读…

odoo16前端框架源码阅读——env.js

env.js&#xff08;env的初始化以及服务的加载&#xff09; 路径&#xff1a;addons\web\static\src\env.js 这个文件的作用就是初始化env&#xff0c;主要是加载所有的服务。如orm, title, dialog等。 1、env.js 的加载时机 前文我们讲过前端的启动函数&#xff0c;start.…

系统安全测试详解

一、前言 我刚开始接触安全测试的时候&#xff0c;想的最多就说那种在昏暗的灯光下&#xff0c;带着神秘面具的黑客&#xff0c;对着键盘噼里啪啦一顿猛如虎的操作&#xff0c;然后长舒一口气&#xff0c;最后来了句yes&#xff0c;完美收工&#xff01; 随后的职业生涯中&am…

LaTex 空行

在LaTeX中&#xff0c;可以通过命令\vspace{\baselineskip}或者使用\bigskip来插入一个空行。 以下是示例代码&#xff1a; 这是一段文字。\vspace{\baselineskip}这是下一段文字。或者&#xff1a; 这是一段文字。\bigskip这是下一段文字。

你是否了解Spring @EventListener注解?

当创建一个大型的应用程序时&#xff0c;我们经常需要处理各种事件。Spring框架提供了一个强大的事件处理机制&#xff0c;允许我们在应用程序中定义和监听事件。其中&#xff0c;EventListener注解是Spring框架中用于监听事件的主要注解之一。在本篇博客中&#xff0c;我们将深…

Django学习日志08

如何开启事务 事务的目的&#xff1a;为了保证多个SQL语句执行成功&#xff0c;执行失败&#xff0c;前后保持一致&#xff0c;保证数据安全 ACID属性&#xff1a; A&#xff1a;原子性&#xff08;Atomicity&#xff09;&#xff1a;指事务是原子的&#xff0c;对事务中的操…

Mysql 索引与事务

1. 索引 1.1 什么是索引 当我们看一本书时可以通过目录快速的定位到我们想要的章节 &#xff0c;在数据库中查询数据也需要遍历表&#xff0c;而且数据库是把数据存储在硬盘上的&#xff0c;所以读取数据十分的慢&#xff0c;因此就可以给数据库引入索引&#xff0c;提高查询…

python数据可视化之matplotlib.pyplot

文章目录 模块引用折线条图实际应用案例关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 不论是数据挖掘还是数据…

Hadoop-- hdfs

1、HDFS中的三个进程&#xff1a;NameNode&#xff08;NN&#xff09;、DataNode(DN)、SecondNameNode(SNN) 2、NameNode&#xff08;NN&#xff09; 1、作用&#xff1a; 1、接收客户端的一个读、写的服务&#xff0c;在namenode上存储了数据文件和datanode的映射的关系。 …

移动云电脑:摆脱传统桎梏,助推企业数字化转型

如今&#xff0c;随着“云”在企业数字化转型战略中的作用日益凸显&#xff0c;上云是企业数字化转型第一步&#xff0c;已成为业界共识。尤其对于中小企业而言&#xff0c;数字化转型更是一种生存之道。 实际上&#xff0c;企业数字化转型面临很多传统桎梏。例如&#xff0c;数…

企业数字化转型的好处?_光点科技

企业数字化转型是当今商业世界中一个至关重要的议题。数字化转型不仅仅意味着采用新技术&#xff0c;而是涉及到企业在文化、运营和客户体验方面的根本变革。那么&#xff0c;企业数字化转型的好处是什么呢&#xff1f; 1.数字化转型可以显著提高企业的运营效率。 通过自动化流…

Hafnium之分区运行时模型

端点的运行时模型描述了执行上下文在不同状态之间允许的转换。下面是支持的四种分区运行时模型(请参阅[1]第7节): RTM_FFA_RUN:呈现给执行上下文的运行时模型,该执行上下文通过FFA_RUN接口分配CPU周期。RTM_FFA_DIR_REQ:呈现给执行上下文的运行时模型,该执行上下文通过FFA_…

java-jdbc快速入门

文章目录 简介快速入门 简介 JDBC就是使用Java语言操作关系数据库的一套APIJava DataBase Connectivity 快速入门 -- mysql 中准备工作 create database if not exists my_db; use my_db; create table account(id int,name varchar(20),money int ); insert into account v…

进程和线程

在操作系统中&#xff0c;进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是两个基本的执行单元&#xff0c;它们之间有密切的关系&#xff0c;但又有一些重要的区别。 进程&#xff08;Process&#xff09;&#xff1a; 定义&#xff1a; 进程是一…

深度学习之基于YoloV5血红细胞检测识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习已经在许多领域中得到了广泛的应用&#xff0c;包括医疗健康领域。其中&#xff0c;YOLO&#xff08;You O…