2025新年第一赛

news/2025/1/11 12:01:21/文章来源:https://www.cnblogs.com/Dark-Figure/p/18665437

考试中:

发题以后,大致看了一下题目的难度:

  • T1 感觉不太会做,应该是一道推公式或者找规律的题目。
  • T2 感觉很原,但是有点忘了怎么写。
  • T3 明显是 DP,感觉状转还需要想一下。
  • T4 直接写暴力就可以跑了。

T1 上来就用草稿纸推公式,但是推了 20 分钟以后感觉没有什么出路,于是就果断选择先把暴力代码写出来。

写完以后就开始想有没有方式优化,但是没有办法。脑子灵光一现就输入了几组数据:

\[7,100 \]

\[8,100 \]

\[15,100 \]

并且顺便把项数 \(i\) 和答案 \(y\) 打印了出来,然后就惊奇地发现了项数 \(i\) 变大到一定程度以后 \(y\) 构成的数列就成了等差数列。

一开始想着先找规律把 \(y\) 之间的公差求出来(大概就是按照 \(6\) 的倍数来划分了公差),但是在和暴力代码对拍的时候就发现错了很多。

于是干脆就直接不提前求出公差,当找到 \(y\) 序列中的 \(3\) 个数以后就可以直接输出答案,否则就一直暴力地跑下去,自己也预估了一下,发现要暴力跑的部分其实并不是很多。

在考试考了 1.5h 以后,我终于写好了这道题目。

T2 我是先跳过了的,直接去看 T3。

状态很简单,一眼就可以看出来:\(f_{i,j}\) 表示对于字符串 \(a\) 中前 \(i\) 个字符和对于 \(b\) 中前 \(j\) 个字符的最小贡献。

然后题目中的性质就是不用管相同字符中间出现的那些,只用在意开头和结尾。判断是不是开头和结尾都很简单,用 \(2\) 个前缀字符串数组优化一下就可以了。如果出现了第一个就减去 \(i+j\),如果出现了最后一个就加上 \(i+j\)

但是由于没有初始化 \(f_{0,j}\)\(f_{i,0}\) 因此输出的数都是负数。

T4 我写的是 \(O((n-1)!)\) 的时间复杂度进行暴力,所以只得了 \(30\) 分。

T2 考试中写二分的时候忘记要先将 \(mid\) 提前减去,因此就写错了。

总结:

新年第一赛暴露了自己在 DP 转移和知识点扩展不充分的问题。

题解:

T1:【2015年7月的月赛】Ciocio的数学高考

跟考试中想的一样,代码实现很简单。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int Ts;
ll x,y,k,lst,now;
int main(){*cin.tie(nullptr)<<fixed<<setprecision(20);cout.tie(nullptr)->ios_base::sync_with_stdio(false);cin>>Ts;while(Ts--){cin>>x>>y;lst=x,now=x;bool flag=false;for(int i=2;i<=y;i++){if(now%i) now=now+i-now%i;if(lst/(i-1)==now/i){cout<<(ll)y*(now/i)<<'\n';flag=true;break;}lst=now;}if(!flag) cout<<now<<'\n';}return 0;
}

T2:【思维挑战】帮忙

推完式子以后发现减去 \(mid\) 以后就没有很棘手的限制了,加上一个后缀最大值数组就过了。

const int N=1e6+5,eps=1e-4;
int n,k,a[N];
double s[N],Max[N];
bool check(double value){for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i]-value;Max[n]=s[n];for(int i=n-1;i;i--) Max[i]=max(Max[i+1],s[i]);for(int i=1;i<=n-k+1;i++) if(Max[i+k-1]>=s[i-1]) return true;return false;
}
signed main(){*cin.tie(nullptr)<<fixed<<setprecision(20);cout.tie(nullptr)->ios_base::sync_with_stdio(false);cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i];double l=0.0000,r=2e9+5;for(int cnt=1;cnt<=500;cnt++){double mid=(l+r)/2.000000;if(check(mid)) l=mid;else r=mid;}cout<<(int)(l*1000)<<'\n';return 0;
}

T3:小车的颜色

感谢 pyj,感谢 pyj。

思路很简单但是细节比较多。

#include<bits/stdc++.h>
using namespace std;
const int N=5e3+5;
int Ts,n,m,f[N][N],s1[27][N],s2[27][N];
string a,b;
inline int calc(char ch){return (int)(ch-'A'+1);}
int main(){*cin.tie(nullptr)<<fixed<<setprecision(20);cout.tie(nullptr)->ios_base::sync_with_stdio(false);cin>>Ts;while(Ts--){cin>>a>>b;n=a.size(),m=b.size();a=" "+a,b=" "+b;memset(s1,0,sizeof s1),memset(s2,0,sizeof s2);for(int i=1;i<=n;i++){for(int j=1;j<=26;j++) s1[j][i]=s1[j][i-1];s1[calc(a[i])][i]++;}for(int i=1;i<=m;i++){for(int j=1;j<=26;j++) s2[j][i]=s2[j][i-1];s2[calc(b[i])][i]++;}
//		cout<<"a="<<a<<'\n'<<"b="<<b<<'\n';
//		for(int i=1;i<=26;i++){
//			cout<<(char)(i+'A'-1)<<":";
//			for(int j=0;j<=n;j++){
//				cout<<s1[i][j]<<'\t';
//			}
//			cout<<'\n';
//		}
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		cout<<'\n';
//		for(int i=1;i<=26;i++){
//			cout<<(char)(i+'A'-1)<<":";
//			for(int j=0;j<=m;j++){
//				cout<<s2[i][j]<<'\t';
//			}
//			cout<<'\n';
//		}
//		
//		memset(f,0x3f,sizeof f);f[0][0]=0;for(int i=1;i<=n;i++){f[i][0]=f[i-1][0];if(!s1[calc(a[i])][i-1]){f[i][0]-=i;}if(s1[calc(a[i])][n]==s1[calc(a[i])][i]&&!s2[calc(a[i])][m]){f[i][0]+=i;}}for(int i=1;i<=m;i++){f[0][i]=f[0][i-1];if(!s2[calc(b[i])][i-1]){f[0][i]-=i;}if(s2[calc(b[i])][m]==s2[calc(b[i])][i]&&!s1[calc(b[i])][n]){f[0][i]+=i;}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int x=f[i-1][j],y=f[i][j-1];if(!s1[calc(a[i])][i-1]&&!s2[calc(a[i])][j]) x-=(i+j);if(s1[calc(a[i])][i]==s1[calc(a[i])][n]&&s2[calc(a[i])][j]==s2[calc(a[i])][m]) x+=(i+j);if(!s1[calc(b[j])][i]&&!s2[calc(b[j])][j-1]) y-=(i+j);if(s1[calc(b[j])][i]==s1[calc(b[j])][n]&&s2[calc(b[j])][j]==s2[calc(b[j])][m]) y+=(i+j);f[i][j]=min(x,y);}}
//		for(int i=0;i<=n;i++)
//		{
//			for(int j=0;j<=m;j++)
//			{
//				cout<<f[i][j]<<"\t";
//			}
//			cout<<endl;
//		}cout<<f[n][m]<<'\n';}return 0;
}
/*
1
GBBY
YRRGB
*/

T4:交作业

还未过

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

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

相关文章

招行面试:亿级秒杀,超卖问题+少卖问题,如何解决?(图解+秒懂+史上最全)

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

OpenCL入门笔记

1、概述 1.1、OpenCL标准 OpenCL(Open Computing Language)是一个开放标准的并行编程框架,它允许开发者在异构系统上利用各种计算设备(例如CPU、GPU、FPGA等)来加速任务,目前已被广泛应用于视频处理、医学成像、机器学习等领域。 OpenCL最初由苹果公司提出,并在与AMD、IBM…

京东自动化上传图片

背景:客户目前每天需花费2小时在京东平台上传商品图片,该过程涉及手动输入SkuId并上传相应图片。由于商品数量庞大,这一操作不仅繁琐,而且容易导致错误匹配的情况。期望:通过引入自动化工具实现京东商品图片更新的自动化处理,提高操作准确性,预计每日为客户节省2小时的人…

46. bootstrap

1. bootstrap介绍中文网:https://bootcss.com/bootstrap需要导入两个文件:上方文件夹里的css文件和JavaScript文件 由于bootstrap v3依赖jQuery,因此还要导入jQuery文件bootstrap的核心是通过class直接使用类 2. 全局css样式 Bootstrap 将设置全局的 CSS 样式。HTML 的基本元…

虽然你已经更新了,但是pip依然提示[notice] A new release of pip is available

虽然你已经更新了pip的版本,但是pip依然提示[notice] A new release of pip is available,而且导致安装的时候出错。其实是在 pip 对应的文件夹中有多个.dist-info文件。 参照你的python位置,如:"..\PythonXX\Lib\site-packages\pip-{老版本}.dist-info"留一个就…

02 Java基础

注释 定义:写代码时,随着项目变复杂要用到注释,注释是给写代码的人看的,且写注释是好习惯。 类型:单行注释 // 多行注释 /* 注释 */ 文档注释 /**注释 */标识符 关键字:Java 所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符 标识符注意点:…

五子棋软件Gomoku

大家好!Gomoku是我用VB6开发的五子棋软件,适合于打谱,棋盘截图等。(不支持人机对弈)每走一步棋,右侧的列表框显示相应的坐标,鼠标点击右侧列表可以悔棋。

循环语句小结

三种循环语句特点及比较一、for循环语句 for语句最常用的格式为: for (循环变量赋初值;循环条件;循环变量增值) 语句; 注: “语句;”就是循环体,可以是一个简单的语句,也可以是一个用“{}”括起来的复合语句。 它的执行过程如图示:for语句要素与流程环节对应图:二、w…

【建议收藏】工程师必须要知道的20个PCB设计规则

今天给大家分享:工程师必须知道的 12 个PCB设计原则 1、控制走线长度 控制走线的长度,顾名思义,就是短走线的规则,PCB 设计时应控制走线长度尽可能短,以免因走线过长而引入不必要的干扰。 特别是对于一些重要的信号线,例如时钟信号走线,一定要将其振荡器放置得离器件非常…

创建maven多模块项目

创建Maven父模块创建项目项目目录结构、pom.xml文件在pom.xml文件中配置打包类型为pom创建子模块common选中项目,鼠标右键,依次选择 “New→Module”项目pom.xml文件,可以看到parent标签里的内容,表示父模块的信息。在pom.xml文件中配置打包类型为jar(非必须,可加可不加)…

《操作系统真相还原》实验记录2.4——内存管理系统

本文章实现内容如下: 1. 位图的建立; 2. 内存池初始化; 3. 分配内存初试;一、位图 bitmap 及其函数的实现 1.1 位图简介位图,也就是bitmap,广泛用于资源管理,是一种管理资源的方式、手段。“资源”包括很多,比如内存或硬盘,对于此类大容量资源的管理一般都会采用位图…

信息安全数学基础-期末(第八章)

群 定义 半群的定义:设S是一个具有结合法的非空集合.如果S中有一个元素e;使得对S中所有元素a,都有 ea=ae=a. 单位元的定义: 性质:设 S是一个有单位元的半群, 则对 S 中的任意可逆元 a, 其逆元 a 是唯的 群的定义: 子群 定义: 同态和同构 定义: 单射、满射、双射: 单射确…