ABC371

news/2025/1/15 14:03:08/文章来源:https://www.cnblogs.com/zuoqingyuan/p/18414815

呜呜呜,第一次打完完整的 ABC。才打了 2000 多名,太菜了。(

A - Jiro

十分简单,分讨即可。

点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
char a,b,c;
int main(){cin>>a>>b>>c;if(a=='>'){if(b=='>'){if(c=='>')cout<<"B"<<endl;if(c=='<')cout<<"C"<<endl;}if(b=='<'){if(c=='>')cout<<"A"<<endl;if(c=='<')cout<<"A"<<endl;}}if(a=='<'){if(b=='>'){if(c=='>')cout<<"A"<<endl;if(c=='<')cout<<"A"<<endl;}if(b=='<'){if(c=='>')cout<<"C"<<endl;if(c=='<')cout<<"B"<<endl;}}return 0;
} 

时间复杂度 \(O(1)\)

B - Taro

用一个数组记录每个家庭是否生过一个男孩。

如果是女的直接输出 no,否则查看数组是否标记,然后做判断。

点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N=105;
int n,m,mk[N];
int main(){cin>>n>>m;for(int i=1;i<=m;i++){char f;int x;cin>>x>>f;if(f=='F')cout<<"No"<<endl;else{if(mk[x])cout<<"No"<<endl;else cout<<"Yes"<<endl,mk[x]=1;}}return 0;
}

时间复杂度 \(O(n)\)

C - Make Isomorphic

终于不再入门。不过依然十分简单。

“同构”的关系比较难处理,不过我们可以这样理解同构:

给每个 \(G\) 上的点 \(i\) 确定一个 \(H\) 上的点 \(p_i\),如果 \(G,H\) 同构,则说明 \(\forall (i,j),G_{i,j}=1,H_{p_i,p_j}=1\)

排列 \(p\) 是不确定的,不过 \(n\le 8\),可以暴力枚举全排列,然后取所有全排列的方案的最小花费。

计算方案的花费非常简单,先将原图使用邻接矩阵存储下来,枚举邻接矩阵上的每个位置,如果存在没某个位置 \((i,j)\) 使得 \(G_{i,j}\ne H_{i,j}\),则花费增加 \(A_{i,j}\)

全排列可以用 STL 中的 next_permutation 函数来实现。

点击查看代码
#include <iostream>
#include <algorithm>
using namespace std;
int p[10],n,w[10][10],h[10][10],m,ans=1e9+10,a[10][10];
int main(){cin>>n;for(int i=1;i<=n;i++){p[i]=i; } cin>>m;for(int i=1,u,v;i<=m;i++){cin>>u>>v;w[u][v]=w[v][u]=1;}cin>>m;for(int i=1,u,v;i<=m;i++){cin>>u>>v;h[u][v]=h[v][u]=1;}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){cin>>a[i][j];a[j][i]=a[i][j];}}while(1){int res=0;for(int i=1;i<=n;i++){for(int j=1;j<i;j++){if(w[i][j]!=h[p[i]][p[j]])res+=a[p[i]][p[j]];}}ans=min(ans,res);if(!next_permutation(p+1,p+1+n))break;}cout<<ans<<endl;return 0;
}

时间复杂度 \(O(n!·n^2)\)

D - 1D Country

感觉比上一题还简单,不过有一点细节。

静态查询区间和,显然可以用前缀和。

下标过大,可以离散化,然后二分查找,因为题目限制,实现起来非常简单。

注意二分的边界问题,如果不存在一个村庄位置小于当前查询的 \(l\),或不存在一个村庄位置大于当前查询的 \(r\)。答案都是 \(0\)

否则二分查找第一个大于等于 \(l\) 的村庄离散化后的值,即为查询的左边界;二分查找第一个大于 \(r\) 的村庄离散化后的值,其减一即为查询的有区间。可以用 STL 中的 lower_boundupper_bound 实现。

点击查看代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N=2e5+10;
typedef long long ll;
ll n,q,x[N],s[N];
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld",x+i);}for(int i=1;i<=n;i++){scanf("%lld",s+i);s[i]+=s[i-1];}scanf("%d",&q);for(int i=1;i<=q;i++){ll l,r;scanf("%lld %lld",&l,&r);if(l>x[n]||r<x[1])printf("0\n");else{l=(lower_bound(x+1,x+1+n,l)-x)-1;r=(upper_bound(x+1,x+1+n,r)-x)-1;printf("%lld\n",s[r]-s[l]);}}return 0;
}

时间复杂度 \(O(q\log n)\)

E - I Hate Sigma Problems

终于上难度哩!

由于长的像序列分治,所以我决定使用序列分治。

假设当前分治区间为 \([l,r]\),令 \(mid=\dfrac{l+r}{2}\)。我们考虑如果快速计算所有 \(l\le i\le mid<j\le r\)\(f(i,j)\) 之和。

我们考虑枚举 \(j\),假设 \(s=\sum_{i=l}^{mid}f(i,j-1)\)。我们考虑 \(a_j\) 的加入对 \(s\) 的影响。

如果存在 \(k\in[mid+1,j-1],a_k=a_j\),则 \(a_j\) 的加入无任何影响,即 \(\sum_{i=l}^{mid}f(i,j)=\sum_{i=l}^{mid}f(i,j-1)\)

如果不存在 \(k\) 满足上述条件,那么对于那些 \(i\in [l,mid]\) 且不存在 \(k\in [i,mid]\) 使得 \(a_k=a_j\) 的区间 \(f(i,j)\) 均等于 \(f(i,j-1)+1\)。我们直接在 \(s\) 上修改。

暴力枚举 \(i\) 显然是低效的,我们预处理出 \(lst_x\) 表示 \(x\)\([l,mid]\) 中最后一次出现的位置,显然所有 \(i\in [lst_{a_{j}}+1,mid]\) 均满足要求。

最后记得清空。

点击查看代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N=2e5+10;
typedef long long ll;
int n,a[N],lst[N],mk[N];
ll ans;
void solve(int l,int r){if(l==r){ans++;return;}int mid=(l+r)>>1;ll res=0,sum=0;solve(l,mid);solve(mid+1,r);for(int i=mid;i>=l;i--){if(!lst[a[i]])lst[a[i]]=i,res++;sum+=res;}for(int i=mid+1;i<=r;i++){if(!mk[a[i]]){if(lst[a[i]])sum+=mid-lst[a[i]];else sum+=mid-l+1;mk[a[i]]=1;}ans+=sum;}for(int i=l;i<=mid;i++)lst[a[i]]=0;for(int i=mid+1;i<=r;i++)mk[a[i]]=0;return;
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",a+i);}	solve(1,n);printf("%lld\n",ans);return 0;
}

时间复杂度 \(O(n\log n)\)

好像有点复杂了

F - Takahashi in Narrow Road

赛时理解错题意了,本来以为是安排最优方案,没想到是模拟。

好像用线段树做一下就可以了,可惜没时间了

G - Lexicographically Smallest Permutation

赛时好像有点思路?大概是并查集+贪心。

可是时间太短了。

The End

这么说给我四个小时我可以 AK ABC?!?这一定是时间太短的问题

菜就多练,输不起就别玩。

--《古希腊哲学》

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

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

相关文章

USB分析仪USB3.2日志分析

1.简介 USB2.0总线采用轮询模式,即总线事务开始时,都要先发送IN或者OUT令牌包,以通知端点或者查询端点是否准备好。而USB3.2采用了异步通知模式,若端点没有准备好,则主机无需轮询,端点准备好后会通知主机,而对于OUT端点,主机会直接发送DP数据包,相当于将USB2.0中的OUT…

[第一章 web入门]SQL注入-1

启动靶机很明显注入点为id值,单引号闭合影响语句,说明为单引号闭合构造注入语句 ?id=1 and 1 =1 --+ 发现没报错,说明没有其他过滤 ,开始sql注入 ?id=1 order by 4 --+ 直到=4报错说明有3个字节段测试回显位2,3 ?id=1 and 1 = 2 union select 1,2,3 --+ 测试当…

数据结构 —堆

今天学习算法了没,你小子瞅啥呢!一:堆 1、一种二叉树的结构(完全二叉树) 2、完全二叉树:从上到下;从左到右;填满 3、最大堆:根节点的权值大于孩子节点 4、最小堆:根节点的权值依次小于孩子节点 5、常用操作 import heapq# 创建最小堆和最大堆 min_heap = [] max_heap…

软工第一次作业-论文查重

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标 通过Java开发个人项目,实现项目单元测试作业github地址(含jar包) github:https://github.com/…

第二十讲:为什么我只改一行的语句,锁这么多?

该文章深刻揭示了一点:加索引=行锁+间隙锁=(next-key lock),分析了加锁的规则:对主键(唯一索引),普通非唯一索引进行等值与范围查询的加锁。这篇文章我认为收获最大的是让我们知道“明明对一行加了锁,为什么在他相邻部分,或是相相邻部分无法插入数据(这根主键类型,…

【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例

原文链接:https://tecdat.cn/?p=37702 原文出处:拓端数据部落公众号 分析师:Dongzhi Zhang 近年来人工神经网络被学者们应用十分广泛,预测领域随着神经网络的引入得到了很大的发展。本文认为单一神经网络模型对序列所包含的线性信息和非线性信息的挖掘是有限的,因此本…

Docker-Compose搭建RustDesk服务器

前置条件:电脑安装RustDesk客户端,服务器安装Docker及docker-compose官方文档:安装 :: RustDesk文档操作流程:使用Vim编写docker-compose.yml文件,修改需要的端口,最好按照官方对应的端口来操作,< >内替换成服务器对外的端口。记住挂载文件路径,容器运行后会生成密…

CMake构建学习笔记16-使用VS进行CMake项目的开发

详细介绍了通过Visual Studio 2019 这款IDE进行CMake项目开发过程,能够极大增加C/C++程序的开发效率。目录1. 概论2. 详论2.1 创建工程2.2 加载工程2.3 配置文件2.4 工程配置2.5 调试执行3. 项目案例4. 总结 1. 概论 在之前的系列博文中,我们学习了如何构建第三方的依赖库,也…

USB总线-Linux内核USB3.0主机控制器驱动初始化流程分析(十三)

1.概述 RK3588有2个USB3.0 DRD控制器,2个USB2.0 Host控制器。USB3.0 DRD控制器既可以做Host,也可以做Device,向下兼容USB2.0和USB1.0。USB3.0 DRD控制器的内部结构如下图所示;总线接口为AXI或AHB;USB3.0和USB2.0及USB1.0硬件上独立;USB3.0控制器数字逻辑部分对应SS MAC,…

作业2:个人项目

个人项目-论文查重 一、课程信息这个作业属于哪个课程 班级的链接这个作业要求在哪里 作业要求的链接这个作业的目标 熟悉软件开发以及工具的使用、算法的设计、资料的搜集GitHub地址 二、开发环境开发工具 IDEA 2021.3.2项目构建工具 maven单元测试 Junit分词依赖包 hanlp三、…

Linkedin-SRE-中文教程-二-

Linkedin SRE 中文教程(二)原文:School of SRE 协议:CC BY-NC-SA 4.0一些 Python 概念原文:https://linkedin.github.io/school-of-sre/level101/python_web/python-concepts/虽然期望您了解 python 及其基本语法,但是让我们讨论一些基本概念,这将帮助您更好地理解 pyth…