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

2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛

2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛

2024.8.2 12:00————16:00

过题数790/1500
补题数943.33/1500

  • A+B Problem
  • Komorebi的数学课
  • 次佛锅
  • Setsuna的K数列
  • Wiki下象棋
  • 黄金律法
  • 天气预报
  • 叠硬币
  • A+B Problem again
  • 史东薇尔城
  • 取模
  • 剪绳子
  • 数硬币
  • 截肢葛瑞克
  • 上海施工小学

A - A+B Problem

题解:
给出一个长度为n的数组,对于数组中的每一个数字a,再数组中的其他数字中找到一个b使得a+b最大。输出n个数字。
找出数组最大值并判断有几个,有多个的话输出所有的数字加上最大值的结果即可,只有一个的话,最大的数字要加上第二大的数字,别的加上最大的数字即可。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
int a[100005];
int an[100005];signed main() {int n;cin >> n;int ma = 0;int ma2 = 0;for (int i = 1; i <= n; i++) {cin >> a[i];if(a[i] > ma)ma = a[i];}int t = 0;int wz;for (int i = 1; i <= n; i++) {if(ma == a[i]){wz = i;t++;continue;}an[i] = a[i]+ma;if(an[i] > ma2)ma2 = an[i];}if(t == 1) {for (int i = 1; i <= n; i++) {if(i == wz)an[i] = ma2;cout << an[i] << ' ';}}else {for (int i = 1; i <= n; i++) {if(a[i] == ma)an[i] = a[i]+ma;cout << an[i] << ' ';}}return 0;
}

B - Komorebi的数学课

题解:
输出n的n次方mod(n+2)
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
int n;int qpow(int base,int power,int mod) {int res = 1;while(power) {if(power & 1)res= res*base%mod;base= base*base%mod;power >>=1;}return res;
}signed main() {cin >> n;cout << qpow(n,n,n+2);return 0;
}

C - 次佛锅

题解:
第一行给出一串字符串,表示这个食材有多少个,相同食材可能多次出现。
用map存取查找即可。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
int n;
string s;
int t;
map<string,int>mp;signed main() {getline(cin,s);string p = " ";int lt = 0;for (int i = 0; i < s.length(); i++) {while(('a' <= s[i] && s[i] <= 'z') || 'A' <= s[i] && s[i] <= 'Z') {p = p+s[i];i++;}while('0' <= s[i] && s[i] <= '9') {lt = lt*10 + s[i]-'0';i++;}if(s[i] == ' ') {if('0' <= s[i-1]  && s[i-1] <= '9') {mp[p] += lt;p = ' ';lt = 0;}}}mp[p] += lt;cin >> t;while(t--) {string q;cin >> q;q = ' '+q;cout << mp[q] << endl;}return 0;
}

D - Setsuna的K数列

最近好像总是遇到类似题,不知道是不是我的错觉,就是这种用位运算代替直接运算的,会方便很多,但敏感度不够,更多的是看感觉。
题解:
给定俩个整数n和k,创建一个集合A,包含k的所有整数次幂,去A中任意个元素相加,并放进一个新的集合B,将B中的元素从小到大排序输出第n项。
可以考虑到其实就是从第1个数字到第n个数字,每个位上的1分别代表加上了k的i次方,且就是一个递增的序列,所以直接快速幂输出即可。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
int n;
string s;
int t;
map<string,int>mp;signed main() {getline(cin,s);string p = " ";int lt = 0;for (int i = 0; i < s.length(); i++) {while(('a' <= s[i] && s[i] <= 'z') || 'A' <= s[i] && s[i] <= 'Z') {p = p+s[i];i++;}while('0' <= s[i] && s[i] <= '9') {lt = lt*10 + s[i]-'0';i++;}if(s[i] == ' ') {if('0' <= s[i-1]  && s[i-1] <= '9') {mp[p] += lt;p = ' ';lt = 0;}}}mp[p] += lt;cin >> t;while(t--) {string q;cin >> q;q = ' '+q;cout << mp[q] << endl;}return 0;
}

E - Wiki下象棋

当时写了dfs,怎么都想不起来bfs怎么写,最后果然是没有写出来。dfs一直tle,优化也没用。
题解:
t组数据,每组给出棋盘的行列数和每个棋子的个数,坐标,起点和终点。
bfs跑俩遍就可以,对于马脚特判一下。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
const int N = 310;
int dx[] = {-2,-2,-1,1,2,2,1,-1};
int dy[] = {-1,1,2,2,1,-1,-2,-2};
int t;
bool st[N][N];
int vis[N][N];
int n,m,k,a,b,c,d;
int ans = 1e9;
int ans1 = 1e9;
typedef pair<int,int> PII;void bfs(int x,int y) {queue<PII>q;memset(vis,-1,sizeof vis);vis[x][y] = 0;q.push({x,y});while(!q.empty()) {x=q.front().first;y=q.front().second;for (int i = 0; i < 8; i++) {int ax = x+dx[i],ay = y+dy[i];if(ax < 1 || ax > n || ay < 1 || ay > m)continue;if(st[ax][ay])continue;if(vis[ax][ay] == -1) {vis[ax][ay] = vis[x][y]+1;q.push({ax,ay});}}q.pop();}cout << vis[c][d] << ' ';return ;
}void bfs1(int x,int y) {queue<PII>q;memset(vis,-1,sizeof vis);vis[x][y] = 0;q.push({x,y});while(!q.empty()) {x = q.front().first;y = q.front().second;for (int i = 0; i < 8; i++) {int ax = x+dx[i],ay = y+dy[i];if(ax < 1 || ax > n || ay < 1 || ay > m)continue;if(dx[i] == -2 && st[x-1][y])continue;if(dx[i] == 2 && st[x+1][y])continue;if(dy[i] == 2 && st[x][y+1])continue;if(dy[i] == -2 && st[x][y-1])continue;if(st[ax][ay])continue;if(vis[ax][ay] == -1) {vis[ax][ay] = vis[x][y]+1;q.push({ax,ay});}}q.pop();}cout << vis[c][d] << endl;return ;
}signed main() {cin >> t;while(t--) {memset(st,0,sizeof st);cin >> n >> m >> k >> a >> b >> c >> d;while(k--) {int la,lb;cin >> la >> lb;st[la][lb] = true;}ans = 5000;memset(vis,0,sizeof vis);bfs(a,b);ans1 = 5000;memset(vis,0,sizeof vis);bfs1(a,b);}
}

F - 黄金律法

很奇怪的一道题,当时看过的人多直接试了一下,结果竟然过了。好像是不等式的知识?
题解:
有n个武器的属性值和n个魔法的属性值,现在要求单个属性对应单个魔法相乘求和的最小值。
一个递增一个递减相乘求和即可。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
const int N = 1e6+10;
int t;
int w[N],m[N];signed main() {cin >> t;while(t--) {int n;cin >> n;for (int i = 1; i <= n; i++)cin >> w[i];sort(w+1,w+1+n);for (int i = 1; i <= n; i++)cin >> m[i];sort(m+1,m+1+n,greater<int>());int ans = 0;for (int i = 1; i <= n; i++) {ans += (w[i]*m[i]);}cout << ans << endl;}return 0;
}

G - 天气预报

题解:
未来n天的天气用一个字符串来表示,0表示晴朗,1表示会下青蛙。现在要求找出区间,可以一天都不选,使得他在这段时间内至少可以出去玩a天,休息b天。
对于这段区间的左节点循环遍历,右节点二分判断找到最接近的满足条件的日子,后面的所有日子都满足,直接相加就可以,很简单的二分。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
#define ll long long
const int N = 1e6+10;
int n,a,b;
int aa[N],bb[N];
//晴朗 休息int check(int i,int j) {ll p = aa[j] - aa[i-1];ll q = bb[j] - bb[i-1];if(p >= a && q >= b)return 1;return 0;
}signed main() {cin >> n >> a >> b;string s;cin >> s;s = ' '+s;for (int i = 1; i <= n; i++) {if(s[i] == '0') {aa[i] = aa[i-1]+1;bb[i] = bb[i-1];}else {bb[i] = bb[i-1]+1;aa[i] = aa[i-1];}}int ans = 0;
//     int m = 0;
//     for (int i = 1; i <= n; i++) {
//         if(aa[i]-aa[m] >= a && bb[i]-bb[m] >= b){
//             ans += (n-i+1);
//             m++;
//         }
//     }
//     for (int i = m; i <= n; i++) {
//         if(aa[n]-aa[i] >= a && bb[n]-bb[i] >= b) {
//             ans++;
//         }
//         else break;
//     }if(a==0&&b==0)ans++;//特殊情况:当a和b均为0时,可以一天也不选for(int i=1;i<=n;i++){ll l=i,r=n;while(l<r){ll mid=(l+r)/2;if(check(i,mid))r=mid;else l=mid+1;}if(check(i,l))ans+=(n-l+1);}cout << ans << endl;return 0;
}

J - 史东薇尔城

题解:
有n个节点和m条边,询问t次,每次si,ti。需要从si跑回1再跑到ti,球最短路径。
也就是从1跑到si再跑到ti。跑一遍Dijkstra然后输出最短距离即可。
代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6+10;
int n,m;
int dis[N],vis[N];
const int INF = 0x3f3f3f3f;
typedef pair<int,int>PII;
#define endl "\n"struct ty {int to,next,w;
}edge[N+1000];int cnt = 0;
int head[N];
void add_edge(int u,int v,int w) {cnt++;edge[cnt].to = v;edge[cnt].w = w;edge[cnt].next = head[u];head[u] = cnt;
}void dij(int x) {priority_queue<PII,vector<PII>,greater<PII>>pq;pq.push({0,x});dis[x] = 0;while(!pq.empty()) {int x = pq.top().second;pq.pop();//一开始一直写在continue以后跑死循环了if(vis[x])continue;vis[x] = 1;for (int i = head[x]; i!=-1; i = edge[i].next) {if(!vis[edge[i].to]) {if(dis[edge[i].to] > dis[x] + edge[i].w) {dis[edge[i].to] = dis[x] + edge[i].w;pq.push({dis[edge[i].to],edge[i].to});}}}}
}signed main( ){scanf("%lld %lld",&n,&m);memset(head,-1,sizeof head);int a,b,c;for (int i = 1; i <= m; i++) {scanf("%lld %lld %lld",&a,&b,&c);add_edge(a,b,c);add_edge(b,a,c);}int t;scanf("%lld",&t);memset(dis,INF,sizeof dis);memset(vis,0,sizeof vis);dij(1);//别再里面跑!浪费时间!int si,ti;while(t--) {cin >> si >> ti;printf("%lld\n",dis[si]+dis[ti]);}return 0;
}

L - 剪绳子

题解:
十米的绳子,C表示在这个位置减一刀,A表示在这个位置询问这条绳子的长度。
怀疑是数据太水了,暴力跑了一遍就过了。
官方给出的题解是一开始把所有点当成一个绳子,然后把每一截绳子练成一个并查集,倒着往前遍历,C表示连上这俩个并查集,A表示查询。储存输出。
代码:

#include<bits/stdc++.h>using namespace std;
#define int long long
set<double>p;signed main() {int q;cin >> q;while(q--) {char s;cin >> s;double m;cin >> m;if( s== 'A') {double gg = 0;double now = 10;for (auto x: p) {if(x > m){now = x;break;}else gg = x;}double res = now-gg;printf("%0.5lf\n",res);}else {p.insert(m);}}return 0;
}

相关文章:

2022年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛

2022年中国高校计算机大赛-团队程序设计天梯赛&#xff08;GPLT&#xff09;上海理工大学校内选拔赛 2024.8.2 12:00————16:00 过题数790/1500 补题数943.33/1500 AB Problem Komorebi的数学课 次佛锅 Setsuna的K数列 Wiki下象棋 黄金律法 天气预报 叠硬币 AB Problem ag…...

多语言海外AEON抢单可连单加额外单源码,java版多语言抢单系统

多语言海外AEON抢单可连单加额外单源码&#xff0c;java版多语言抢单系统。此套是全新开发的java版多语言抢单系统。 后端java&#xff0c;用的若依框架&#xff0c;这套代码前后端是编译后的&#xff0c;测试可以正常使用&#xff0c;语言繁体&#xff0c;英文&#xff0c;日…...

文件上传——springboot大文件分片多线程上传功能,前端显示弹出上传进度框

一、项目搭建 创建 Spring Boot 项目: 创建一个新的 Spring Boot 项目&#xff0c;添加 Web 依赖。 添加依赖: 在 pom.xml 文件中添加以下依赖: <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId&…...

每日学术速递8.2

1.A Scalable Quantum Non-local Neural Network for Image Classification 标题&#xff1a; 用于图像分类的可扩展量子非局部神经网络 作者&#xff1a; Sparsh Gupta, Debanjan Konar, Vaneet Aggarwal 文章链接&#xff1a;https://arxiv.org/abs/2407.18906 摘要&#x…...

SAP-PLM创建物料主数据接口

FUNCTION zplm_d_0001_mm01. *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *" EXPORTING *" VALUE(EX_TOTAL) TYPE CHAR4 *" VALUE(EX_SUCCESSFUL) TYPE CHAR4 *" …...

超声波眼镜清洗机哪个品牌好?四款高性能超声波清洗机测评剖析

对于追求高生活质量的用户来说&#xff0c;眼镜的清洁绝对不能马虎。如果不定期清洁眼镜&#xff0c;时间久了&#xff0c;镜片的缝隙中会积累大量的灰尘和细菌&#xff0c;眼镜靠近眼部&#xff0c;对眼部健康有很大影响。在这种情况下&#xff0c;超声波清洗机显得尤为重要。…...

卸载Windows软件的正确姿势,你做对了吗?

前言 今天有小伙伴突然问我&#xff1a;她把软件都卸载了&#xff0c;但是怎么软件都还在运行&#xff1f; 这个问题估计很多小伙伴都是遇到过的&#xff0c;对于电脑小白来说&#xff0c;卸载Windows软件真的真的真的是一件很难的事情。所以&#xff0c;今天咱们就来讲讲&am…...

WEB前端14-Element UI(学生查询表案例/模糊查询/分页查询)

Vue2-Element UI 1.可重用组件的开发 可重用组件 我们一般将可重复使用的组件放在components目录之下&#xff0c;以便父组件的灵活调用 <!--可重用组件一般与css密切相关&#xff0c;使用可重用组件的目的是&#xff0c;将相似的组件放在一起&#xff0c;方便使用-->…...

使用swiftui自定义圆形进度条实现loading

实现的代码如下&#xff1a; // // LoadingView.swift // SwiftBook // // Created by Song on 2024/8/2. //import SwiftUIstruct LoadingView: View {State var process 0.5var body: some View {VStack(spacing: 20) {ZStack {Circle().stroke(.gray.opacity(0.3), lin…...

C# 设计模式之抽象工厂模式

总目录 前言 工厂方法模式是为了克服简单工厂模式的缺点而设计出来的&#xff0c;简单工厂模式的工厂类随着产品类的增加需要增加额外的代码&#xff0c;而工厂方法模式每个具体工厂类只完成单个实例的创建&#xff0c;所以它具有很好的可扩展性。但是在现实生活中&#xff0c…...

Javascript前端面试基础(八)

window.onload和$(document).ready区别 window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行$(document).ready()是DOM结构绘制完毕后就执行&#xff0c;不必等到加载完毕 window.onload 触发时机&#xff1a;window.onload 事件会在整个页面&#xf…...

R 语言学习教程,从入门到精通,R的安装与环境的配置(2)

1、R的安装与环境的配置 R语言是一款完全免费且开源的软件&#xff0c;它的开源许可证是GNU通用公共许可证&#xff08;GPL&#xff09;&#xff0c;这意味着任何人都可以自由地使用、复制、修改和发布R语言的源代码&#xff0c;甚至可以将其用于商业用途。 和python等其他语言…...

Python批量下载音乐功能

Python批量下载音乐功能 Python批量下载音乐,调用API接口,同时下载歌曲和歌词 先安排一下要用的模块&#xff0c;导入进来。 import re import json import requests目录结构 下载音乐 Awking_Class.pymusic.txt 文件文件写的是音乐名字,使用换行分割 new_music 注意这个 ne…...

用 Bytebase 实现批量、多环境、多租户数据库的丝滑变更

Bytebase 提供了多种功能来简化批量变更管理&#xff0c;适用于多环境或多租户情况。本教程将指导您如何使用 部署配置 和 数据库组 在不同场景下进行数据库批量变更。 默认流水线 vs 部署配置 图片数据库 vs 数据库组 1. 准备 请确保已安装 Docker&#xff0c;如果本地没有重…...

java之方法引用 —— ::

目录 一、简介 二、引用静态方法 1.格式 2.示例 ​编辑 3.条件解析 三、引用成员方法 1.格式 2.示例 四、引用构造方法 1.格式 2.示例 五、类名引用成员方法 1.格式 2.略微不同的方法引用规则 3.示例 六、引用数组的构造方法 1.格式 2.示例 一、简介 方…...

「测试线排查的一些经验-上篇」 后端工程师

文章目录 端口占用脚本失灵线上部署项目结构模版配置文件生效 一般产品研发过程所使用的环境可分为&#xff1a; 研发环境-dev测试环境-test生产环境-prod 软件开发中&#xff0c;完整测试环境包括&#xff1a;UT、IT、ST、UAT UT Unit Test 单元测试 IT System Integration …...

AOSP12_BatteryStats统计电池数据信息

前言 BatteryStats模块主要用于设备在电池供电是系统对各个模块电量使用的统计,Android提供的Battery Historain工具就是对此模块统计的数据进行解析和展示。 一 BatteryStats模块类图 模块主要类图如下:见根目录的模块类图 BatteryStats:抽象类,本模块的核心类,主要定…...

【Android Studio】UI 布局

文章目录 view布局LinearLayout view 在Android开发中&#xff0c;View是一个非常重要的概念&#xff0c;它是所有用户界面组件的基类。View类及其子类构成了Android应用中的用户界面。每个View都占用屏幕上的一个矩形区域&#xff0c;并可以响应用户输入&#xff08;如触摸、按…...

虚拟机Windows server忘记密码解决方法

原理 utilman.exe是Windows辅助工具管理器程序&#xff0c;‌虽然它本身不是一个关键的系统进程&#xff0c;‌但通过修改这个文件&#xff0c;‌用户可以访问一些有用的UI设置。‌在某些情况下&#xff0c;‌比如忘记密码需要重置时&#xff0c;‌通过修改utilman.exe文件为c…...

【香橙派系列教程】(六)嵌入式SQLite数据库

【六】嵌入式SQLite数据库 文章目录 【六】嵌入式SQLite数据库1.简介2.SQLite数据库安装3.SQLite命令用法1.创建数据库2.创建和查看表格3.插入查看数据&#xff08;记录&#xff09;4.删除更改数据&#xff08;记录&#xff09; 4.SQLite编程操作1.打开/创建数据库的C接口2.创建…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

Yolo11改进策略:Block改进|FCM,特征互补映射模块|AAAI 2025|即插即用

1 论文信息 FBRT-YOLO&#xff08;Faster and Better for Real-Time Aerial Image Detection&#xff09;是由北京理工大学团队提出的专用于航拍图像实时目标检测的创新框架&#xff0c;发表于AAAI 2025。论文针对航拍场景中小目标检测的核心难题展开研究&#xff0c;重点解决…...

Redis专题-实战篇一-基于Session和Redis实现登录业务

GitHub项目地址&#xff1a;https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码&#xff1a;e34399f 基于Redis实现登录业务提交版本码&#xff1a;60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...

数据库优化实战指南:提升性能的黄金法则

在现代软件系统中&#xff0c;数据库性能直接影响应用的响应速度和用户体验。面对数据量激增、访问压力增大&#xff0c;数据库性能瓶颈经常成为项目痛点。如何科学有效地优化数据库&#xff0c;提升查询效率和系统稳定性&#xff0c;是每位开发与运维人员必备的技能。 本文结…...

详解ZYNQ中的 RC 和 EP

详解ZYNQ中的 RC 和 EP 一、ZYNQ FPGA 开发板基础&#xff08; ZC706 &#xff09; 1. 核心特点 双核大脑 灵活积木&#xff1a; ZC706 集成了 ARM Cortex-A9 双核处理器&#xff08;相当于电脑 CPU&#xff09;和 FPGA 可编程逻辑单元&#xff08;相当于可自定义的硬件积木…...