当前位置: 首页 > news >正文

第五届武汉纺织大学ACM程序设计竞赛 个人题解(待补完)

前言:

  上周周日教练要求打的一场重现赛,时长五个小时,题目难度还行,除了部分题目前我还写不出来之外,大部分题都写完或补完了,这边给出比赛链接和我的代码(有些是队友的)和题解。

正文:

链接:第五届武汉纺织大学ACM程序设计竞赛(同步赛)_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

A  广告位招租中:

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int a[N];
int b[N];int prime[N];
int cnt;
int n, m;
void solve(int x) {for (int i = 1; i * i <= x; i++) {if (x % i == 0) {b[i]++;int u = x / i;if (u != i) {b[u]++;}}}
}int ans2, ans1;int main() {cin >> n >> m;int y = 0;for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);y = max(y, a[i]);solve(a[i]);}if (m == 1) {cout << n << " " << 1 << endl;return 0;}int t = 0;for (int i = m; i <= y; i++)t = max(t, b[i]);if (t)for (int i = m; i <= y; i++) {if (b[i] == t) {ans2 = i;bool flag = 0;for (int j = i * 2; j <= y; j += i) {if (b[j] == t) {ans2 = j;flag = 1;break;}}if (!flag) {ans2 = i;break;}}}cout << t << " " << ans2 << endl;
}

和队友讨论出来的做法,对输入的每一个数,我们算出他的因子(大于m)并对这些因子个数计数,之后重小因子枚举到最后,如果有更大的因子满足最多的数我们就更新答案,如果没有大于m的因子就输出00。

B MEX of MEXes:

#include <bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;
int a[N];
int b[N];int main() {int n;cin >> n;if (n == 1) {cout << 1;return 0;}if (n == 2) {cout << 4;return 0;}int l, r;for (int i = 1; i <= n; i++) {cin >> a[i];b[a[i]] = i;if (a[i] == 1)l = i;if (a[i] == 2)r = i;}if (l > r)swap(l, r);//cout << l << " " << r << endl;for (int i = 3; i <= n; i++) {int loca = b[i];//cout << i << " " << loca << endl;if (loca > l && loca < r) {cout << i;return 0;} else {l = min(l, loca);r = max(r, loca);continue;}}cout<<n+2;}

  首先如果n=1,那么数组b为{2},那么最后结果为1。如果n>1,那么数组b一定包含1。很自然的,我们想数组b是否包含2,是否包含3,是否包含4......对于是否包含k来说,我们只需要找到数组a的一个非空连续子数组包含1到k-1且不包含k,就说明数组b包含k。那么我们找到包含1到k-1的长度最小的子数组,然后判断里面是否包含k即可。整个过程可以使用双指针实现,维护一个区间,区间初始左右端点为1的位置,再找到2的位置并更新区间左右端点,判断区间内是否包含3,再找3的位置......若此时考虑x的位置,那么区间更新后如果区间包含了x+1,那么就说明数组b中不可能存在x+1,最后答案即为x+1。特殊地,如果考虑了1到n都符合后,那么此时数组b {1,2,3...n+1},最后答案为n+2。

C 战斗时回复:

#include<bits/stdc++.h>
using namespace std;
int main(){double T,h,t,n;cin>>T>>h>>t>>n;if(h/T>=n/t)cout<<"kirito";else cout<<"hangeki";return 0;
}

水题。

D 小太阳的帕鲁世界1:

#include<bits/stdc++.h>
using namespace std;
string s[2005];
bool book[2005][2005];
int ans[2005][2005];
int n,m;
void dfs(int x,int y,int z){if(y>=m||y<0||x>=n||x<0)return;ans[x][y]=z;if(s[x][y]=='L')dfs(x,y+1,z+1);if(s[x][y]=='R')dfs(x,y-1,z+1);   if(s[x][y]=='U')dfs(x+1,y,z+1);if(s[x][y]=='D')dfs(x-1,y,z+1);
}
int main(){cin>>n>>m;memset(ans,-1,sizeof(ans));for(int i=0;i<n;i++){cin>>s[i];}dfs(n-1,m-1,0);for(int i=0;i<n;i++){for(int j=0;j<m;j++){cout<<ans[i][j]<<" ";}cout<<endl;}return 0;
}

简单bfs,队友用了bfs也能过,代码见下

#include <bits/stdc++.h>
using namespace std;const int N = 2010;
char maze[N][N];
int dis[N][N];
bool vis[N][N];
int n, m;int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
typedef pair<int, int> PII;
map<char, PII> ma;void bfs() {queue<PII> q;q.push({n, m});vis[n][m] = 1;dis[n][m] = 0;while (q.size()) {auto t = q.front();q.pop();int x = t.first, y = t.second;char instruct = maze[x][y];auto tt = ma[instruct];int dx = tt.first + x, dy = tt.second + y;//	cout << dx << " " << dy << endl;dis[dx][dy] = dis[x][y] + 1;vis[dx][dy] = 1;if (dx >= 1 && dx <= n && dy >= 1 && dy <= m)q.push({dx, dy});}return;}int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> maze[i][j];}}ma['U'] = {1, 0};ma['D'] = {-1, 0};ma['R'] = {0, -1};ma['L'] = {0, 1};bfs();for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (vis[i][j])cout << dis[i][j] << " ";elsecout << "-1 ";}cout << endl;}}

E 小太阳的帕鲁世界2(待补):

F 又掉分了:

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

贪心,能上分就打,否者不打。

G Birusu的公园(待补):

H 被诅咒的宝藏:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll;
ll a[N],b[N];ll n,s;
bool check(int x){ll cnt=0;for(int i=1;i<=n;i++){b[i]=a[i]+i*x;}sort(b+1,b+n+1);for(int i=1;i<=x;i++){cnt+=b[i];}if(cnt>s)return 1;return 0;
}
int main(){ll ans=0;cin>>n>>s;for(int i=1;i<=n;i++)cin>>a[i];ll l=1,r=n,mid;while(l<r){mid=l+r+1>>1;if(check(mid))r=mid-1;else l=mid;}for(int i=1;i<=n;i++){b[i]=a[i]+i*l;}sort(b+1,b+n+1);for(int i=1;i<=l;i++){ans+=b[i];}cout<<r<<" "<<ans<<endl;  return 0;
}

先用二分找出最多能拿几个物品,这边要注意随着所拿物品数量不同每个物品的代价都会不一样,所以每次判断都要对相应的代价排序,之后在根据数量算出最小重量。

I 决定命运的博弈:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){ll n;cin>>n;if(n==1)cout<<"Dbqjubmjtn";else cout<<"Tpdjbmjtn";return 0;
}

我一开始想的是只有n=1时d能赢,刚刚发现题目条件n>=2 ,所以t是必胜的(只要先手拿不完,后手就能一下拿完)。

J 52Hz的minmax区间(easy)(待补):

K 52Hz的minmax区间(hard)(待补):

这两道题都没啥想法。

L Kaiou的笑话:

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int el[N],er[N],al[N],ar[N];
int main(){int m;cin>>m;string s;int l=-1,r=-1;int ans=10000000;cin>>s;for(int i=0;i<m;i++){if(s[i]=='t')l=i;if(s[i]=='e'){el[i]=l;	}}for(int i=m-1;i>=0;i--){if(s[i]=='n')r=i;if(s[i]=='e'){er[i]=r;	}}l=-1,r=-1;for(int i=0;i<m;i++){if(s[i]=='h')l=i;if(s[i]=='a'){al[i]=l;	}}for(int i=m-1;i>=0;i--){if(s[i]=='n')r=i;if(s[i]=='a'){ar[i]=r;	}}for(int i=0;i<m;i++){if(s[i]=='e'&&el[i]!=-1&&er[i]!=-1){ans=min(ans,er[i]-el[i]-2);}if(s[i]=='a'&&al[i]!=-1&&ar[i]!=-1){ans=min(ans,ar[i]-al[i]-2);}}if(ans==10000000)cout<<-1;else cout<<ans;return 0;
}

记入下中间那个字母左右最近的那个相应字母的位置最后求出最小距离就为答案。

M 大生:

#include<bits/stdc++.h>
using namespace std;
int main(){cout<<"我不知道";return 0;
}

好像输出什么都可以。

后记:

  这个比赛比了一整个下午,刚比完饭还没吃就被拉去上课了,整个人困得很,不过这场比赛的题确实适合我这种算法比赛的新人,待补的题在之后一定补完(什么时候就不知道了)

相关文章:

第五届武汉纺织大学ACM程序设计竞赛 个人题解(待补完)

前言&#xff1a; 上周周日教练要求打的一场重现赛&#xff0c;时长五个小时&#xff0c;题目难度还行&#xff0c;除了部分题目前我还写不出来之外&#xff0c;大部分题都写完或补完了&#xff0c;这边给出比赛链接和我的代码&#xff08;有些是队友的&#xff09;和题解。 正…...

LeetCode---哈希表

242. 有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 代码示例&#xff1a; //时间复杂度: O(n) //空间复杂度: O(1) c…...

Python知识点13---面向对象的编程

提前说一点&#xff1a;如果你是专注于Python开发&#xff0c;那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了&#xff0c;而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python是一个完全面向对象开发的语言&#xff0c;它的一切都以对象的…...

Android Dialog软键盘弹出问题完美解决办法

一、问题&#xff1a; Dialog中有输入框时&#xff0c;显示后无法自动弹起软键盘&#xff0c;原因就不赘述了&#xff0c;自行Google。 一、解决办法&#xff1a; 开启独立线程&#xff0c;线程中使用while循环&#xff0c;循环调用弹起软键盘方法&#xff0c;直至showSoftI…...

【C++】C++入门1.0

鼠鼠最近在学C&#xff0c;那么好&#xff0c;俺来做笔记了&#xff01; 目录 1.C关键字(C98) 2.命名空间 2.1.命名空间定义 2.2.命名空间的使用 3.C的输入&&输出 4.缺省参数 4.1缺省参数概念 4.2.缺省参数的分类 5.函数重载 5.1.函数重载概念 5.2.C支持函数…...

springboot实现文件上传功能,整合云服务

文章目录 这是springboot案例的,文件上传功能的拆分,本篇将带大家彻底了解文件上传功能,先从本地存储再到云存储,全网最详细版本,保证可以学会,可以了解文件上传功能的开发文件上传功能剖析进行书写一个小的文件上传文件上传的文件三要素首先表单提交的方式要是 post方式,第二个…...

接口interfance的基本使用

一.为什么有接口&#xff1f; 接口:就是一种规则。 二.接口的定义和使用 1.接口用关键字interface来定义 public interface 接口名{} 2.接口不能实例化 3.接口和类之间是实现关系,通过implements关键字表示 4.接口的子类(实现类) 注意1&#xff1a; 接口和类的实现关系…...

Gitlub如何删除分支(删除远程分支+本地分支)

目录 背景 删除方法 总结 背景 想要删除自己在本地创建的并已上传到远程分支中的分支。 删除方法 1&#xff09;删除远程分支 git push origin --delete brannchname 2&#xff09;删除本地分支 先切换到其他分支 git checkout otherbranch 删除本地分支 git bran…...

使用RSA算法加密字符串:从基础到实现 - Python

在现代数据安全中&#xff0c;加密算法起着至关重要的作用。特别是非对称加密算法&#xff0c;如RSA&#xff08;Rivest-Shamir-Adleman&#xff09;&#xff0c;广泛应用于保护敏感信息的传输。本文将详细介绍如何使用RSA算法加密和解密字符串&#xff0c;包括生成密钥对、加密…...

MFC实现守护进程,包括开机自启动、进程单例、进程查询、进程等待、重启进程、关闭进程

在Windows平台上实现一个守护进程&#xff0c;由于与系统有关&#xff0c;所有使用MFC来实现是最合适的&#xff0c;被守护的进程则不限语言。废话不多&#xff0c;直接开整。 目录 1. 开机自启动 2. 进程单例 3. 进程查询 4. 进程等待 5. 重启进程 6. 关闭进程 7、最后…...

Spark SQL数据源 - Parquet文件

当使用Spark SQL处理Parquet文件时&#xff0c;你可以使用spark.read.parquet()方法从文件系统中加载Parquet数据到一个DataFrame中。Parquet是一种列式存储格式&#xff0c;非常适合用于大数据集&#xff0c;因为它提供了高效的压缩和编码方案。 以下是一个简单的例子&#x…...

eNsp——两台电脑通过一根网线直连通信

一、拓扑结构 二、电脑配置 ip和子网掩码&#xff0c;配置两台电脑处于同一网段 三、测试 四、应用 传文件等操作&#xff0c;可以在一台电脑上配置FTP服务器...

杂牌记录仪TS视频流恢复方法

大多数的记录仪都采用了MP4/MOV文件方案&#xff0c;极少数的可能在用AVI文件&#xff0c;极极少数的在用TS文件方案。很多人可能不太解TS文件&#xff0c;这是一种古老的视频文件结构&#xff0c;下边这个案例我们来看下TS视频文件的恢复方法。 故障存储:8G存储卡/fat32文件系…...

十_信号7-信号集

int sigemptyset(sigset_t *set); 清空信号集 int sigfillset(sigset_t *set); 填充满 信号集 int sigaddset(sigset_t *set, int signum); 向信号集中添加信号 int sigdelset(sigset_t *set, int signum); 从型号集中删除信号 int sigismember(const sigset_t *set, int s…...

GPT-4o

微软最新发布的CopilotPC采用了OpenAI最新的GPT-4o技术&#xff0c;新增了多项强大功能。以下是主要的新增功能&#xff1a; 更强大的AI处理能力&#xff1a;CopilotPC采用了专门用于AI处理的特殊芯片&#xff0c;使得电脑能够处理更多的人工智能任务&#xff0c;而无需调用云…...

32位与64位程序下函数调用的异同——计科学习中缺失的内容

前言 今天&#xff0c;通过一个有趣的案例&#xff0c;从反编译的角度看一下C语言中函数参数是如何传递的。 创建main.c文件&#xff0c;将下面实验代码拷贝到main.c文件中。 # main.c #include <stdio.h>int test(int a, int b, int c, int d, int e, int f, int g, …...

Python爬虫实战(实战篇)—16获取【百度热搜】数据—写入Ecel(附完整代码)

文章目录 专栏导读背景结果预览1、爬取页面分析2、通过返回数据发现适合利用lxmlxpath3、继续分析【小说榜、电影榜、电视剧榜、汽车榜、游戏榜】4、完整代码总结 专栏导读 &#x1f525;&#x1f525;本文已收录于《Python基础篇爬虫》 &#x1f251;&#x1f251;本专栏专门…...

js切割数组的两种方法slice(),splice()

slice() 返回一个索引和另一个索引之间的数据(不改变原数组),slice(start,end)有两个参数(start必需,end选填),都是索引,返回值不包括end 用法和截取字符串一样 splice() 用来添加或者删除数组的数据,只返回被删除的数据,类型为数组(改变原数组) var heroes["李白&q…...

【计算机毕设】基于SpringBoot的医院管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的医院管理系统&#xff0c;以提高医院管理效率&#xff0c;优化医疗服务流程&#xff0c;提升患者就诊体验…...

导线防碰撞警示灯:高压线路安全保障

导线防碰撞警示灯&#xff1a;高压线路安全保障 在广袤的大地上&#xff0c;高压线路如同血脉般纵横交错&#xff0c;然而&#xff0c;在这看似平静的电力输送背后&#xff0c;却隐藏着不容忽视的安全隐患。特别是在那些输电线路跨越道路、施工等区域的路段&#xff0c;线下超…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...