2023年ACM竞赛班 2023.3.20题解
目录
瞎编乱造第一题
瞎编乱造第二题
瞎编乱造第三题
瞎编乱造第四题
瞎编乱造第五题
不是很想编了但还是得编的第六题
不是很想编了但还是得编的第七题
还差三道题就编完了的第八题
还差两道题就编完了的第九题
太好啦终于编完了
为啥一周六天早八阿
瞎编乱造第一题
因为偶数因子的操作是可逆,所以我们只要匹配奇数因子就可以了
输入的时候我们就把每个偶数元素一直除到奇数
之后我们枚举b数组每一位右移
匹配上就标记一下
如果全匹配上就是Yes,否则就是No
#include <bits/stdc++.h>
using namespace std;const int MAXN = 200005;
int a, bb, b[MAXN];
bool vis[MAXN];void solve()
{int n;cin >> n;for (int i = 1; i <= n; ++i){vis[i] = 0;}multiset<int> sa;for (int i = 1; i <= n; ++i){cin >> a;while ((a & 1) == 0){a >>= 1;}sa.insert(a);}for (int i = 1; i <= n; ++i){cin >> bb;while ((bb & 1) == 0){bb >>= 1;}b[i] = bb;}for (int j = 0; j < 32; ++j){for (int i = 1; i <= n; ++i){if (vis[i]){continue;}auto it = sa.find(b[i] >> j);if (it != sa.end()){sa.erase(it);vis[i] = 1;}}}cout << (sa.empty() ? "YES\n" : "NO\n");return;
}
signed main(){int tt;cin>>tt;while(tt--){solve();}
}
瞎编乱造第二题
对区间总体加减可以转化为差分问题
第一个操作可以转化为第一个数差分-1,选一个位置差分+1
第二个操作可以转化为选一个位置差分-1
第三个操作可以转化为第一个数差分加1
我们把所有的差分求出来后,先将从2-n所有差分归零,在将第一个数归零即可
代码如下
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10;
int n, m, k;
int a[N], d[N];
signed main() {ios::sync_with_stdio(false), cin.tie(0);int T;cin >> T;while (T -- ) {cin >> n;for (int i = 1; i <= n; i ++) cin >> a[i];for (int i = 1; i <= n; i ++) d[i] = a[i] - a[i - 1];int res = 0;for (int i = 2; i <= n; i ++)if (d[i] < 0) {res -= d[i];d[1] += d[i]; }else res += d[i];res += abs(d[1]);cout << res << '\n';}return 0;
}
瞎编乱造第三题
只要从2-n的每个a[i]都是a[1]的倍数即可满足条件
反之则不行
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10;
signed main() {ios::sync_with_stdio(false), cin.tie(0);int T;int t=1;cin>>t;while(t--) {int n;cin>>n;int a1;cin>>a1;int flag=1;for (int i=2; i<=n; i++) {int x;cin>>x;if (x%a1!=0)flag=0;}if(flag==1) cout<<"Yes";else cout<<"No"; cout << endl;}return 0;
}
瞎编乱造第四题
当n为奇数时候,先手必胜,因为只要先手第一轮全拿走,第二轮后手就会拿到你的位置,他就输了
当n为偶数时,因为每个人拿的堆是固定的,所以只要看一下谁最少的堆个数少,谁就会先拿完
谁就输了
要是都相等,就是先手输
代码如下
#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::vector<int> a(n);std::array<i64, 2> step{};for (int i = 0; i < n; i++) {std::cin >> a[i];}if (n % 2 == 1) {std::cout << "Mike\n";return;}for (int t = 0; t < 2; t++) {int min = std::numeric_limits<int>::max();int j = -1;for (int i = t; i < n; i += 2) {if (a[i] < min) {min = a[i];j = i / 2;}}step[t] = 1LL * (n / 2) * min + j;}if (n % 2 == 1 || step[0] > step[1]) {std::cout << "Mike\n";} else {std::cout << "Joe\n";}
}int main() {// freopen("9.in","r",stdin);// freopen("9.out","w",stdout);std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;while (t--) {solve();}return 0;
}
瞎编乱造第五题
只要这个字符串的最后两位不相等,这个字符串就一定满足条件
所以只要遍历一遍,找两个不相等的字符,贡献就是遍历到他的索引(这个代码里有解释)
之后再加上n(每个单独的字符串都满足条件)
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10;
signed main() {// ios::sync_with_stdio(false), cin.tie(0);int T;cin>>T;while(T--) {long long sum = 0;int n;scanf("%lld", &n);string s = " ";cin >> s;for(int i = 1; i < n; i++){if(s[i] != s[i - 1]){//+ i的原因在于//以i这个位置的字符结尾的子串恰好是这么多//↑比如说"1001"的"01",以他们结尾的子串是"1001" "001" "01"正好对应索引3 //如果末位2字符成立,所有子串都成立,反之亦然//而这里是没有把"1"和"0"算进去的,他们必然是成立的,所以直接在外面加就行了 sum += i;}}printf("%lld\n", (sum + n));}return 0;
}
不是很想编了但还是得编的第六题
只要找到x的最低位一并保留即可
如果x只有唯一一位1,答案就要再加1(最低位保留一个1,保证异或大于0)
特判一下1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
#define INF 0x3f3f3f3f
#define lowbit(x) ((x)&(-x))
const ll MOD = 1000000007;
// const ll MOD = 998244353;
const int N = 500010;void slove()
{int n;cin >> n;if(n == 1){cout << 3 << '\n';return;}ll ans = lowbit(n);if(ans != n)cout << ans << '\n';elsecout << ans+1 << '\n';
}int main(void)
{// freopen("9.in","r",stdin);// freopen("9.out","w",stdout);IOS;int tt = 1;cin >> tt;while(tt--){slove();}return 0;
}
不是很想编了但还是得编的第七题
我们找到一个最先变成奇数的数(如果本来就有奇数,那就不需要这步)
把他变成奇数
之后所有的偶数加上这个奇数变成奇数
代码如下
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10;
#define lowbit(x) ((x)&(-x))
int a[N];
signed main() {// ios::sync_with_stdio(false), cin.tie(0);int T;cin>>T;while(T--) {int n;cin >> n;for(int i=1;i<=n;++i){cin >> a[i];}int ans = 0;for(int i=1;i<=n;++i){if(a[i]&1)ans++;}if(ans){cout << n-ans << '\n';continue;}int minn = 1e9+7;for(int i=1;i<=n;++i){int tmp = lowbit(a[i]);int cnt = 0;while(tmp != 1){tmp/=2;cnt++;}minn = min(minn , cnt);}cout << minn+n-1 << '\n';}return 0;
}
还差三道题就编完了的第八题
就把所有数像山一样排起来就好了,中间大两边小
>2数量的x对答案的贡献是1
(假如这样一个数组,1 1 2 2 3 3 4 4,这样排好之后答案就是4,每个数都有两个以上,每个数都贡献1,排好之后1 2 3 4 4 3 2 1)
其他=1的x对答案贡献是总的这样的数/2上取整
(假如这样一个数组,1 2 3 4 5,排好之后答案是3,因为贡献是5/2上取整,排好之后1 3 5 4 2)
这两组贡献加起来
#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::map<int, int> cnt;for (int i = 0; i < n; i++) {int x;std::cin >> x;if (cnt[x] < 2) {cnt[x]++;}}int ans = 0, v = 0;for (auto [x, c] : cnt) {if (c == 2) {ans++;} else {v++;}}ans += (v + 1) / 2;std::cout << ans << "\n";
}int main() {// freopen("10.in","r",stdin);// freopen("10.out","w",stdout);std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;while (t--) {solve();}return 0;
}
还差两道题就编完了的第九题
每个陷阱最初的贡献是a[i]-(n-i),先按这个排好序
(躲掉的伤害减去之后增加的伤害)
接下来考虑陷阱之间相互作用
前面每跳过一个陷阱,后面陷阱躲掉的伤害就+1,贡献也+1
所以是排好序的数组遍历前k个
满足a[i]-(n-i)+(前面跳过的陷阱数)>0这个等式,就可以跳
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+10;
#define lowbit(x) ((x)&(-x))
int a[N];
signed main() {// ios::sync_with_stdio(false), cin.tie(0);int T;cin>>T;while(T--) {long long sum = 0;int n, k;cin >> n >> k;for (int i = 1; i <= n; ++i){cin >> a[i];sum += a[i];a[i] -= n - i;}sort(a + 1, a + 1 + n, greater<long long>());for (int i = 1; i <= k; ++i){if (a[i] > -i){sum -= a[i] + i - 1;}else{break;}}cout << sum << '\n';}return 0;
}
太好啦终于编完了
对于每个前面是>后面是<的位置,把它称之为山谷
也包括第一个<左边的位置和最后一个>右边的位置
我们让每个山谷都是0
之后向两边扩散,每层加1
每个取max就好
代码如下
#include <bits/stdc++.h>
using namespace std;
string a;
int arr[500002]= {0,};
int main()
{cin>>a;int n = a.size();for(int i=0;i<n;i++){if(a[i]== '<')arr[i+1] = max(arr[i+1],arr[i]+1);}for(int i=n-1;i>=0;i--){if(a[i]== '>')arr[i] = max(arr[i+1]+1,arr[i]);}long long sum = 0;for(int i=0;i<=n;i++){sum += arr[i];}cout<<sum;
}相关文章:
2023年ACM竞赛班 2023.3.20题解
目录 瞎编乱造第一题 瞎编乱造第二题 瞎编乱造第三题 瞎编乱造第四题 瞎编乱造第五题 不是很想编了但还是得编的第六题 不是很想编了但还是得编的第七题 还差三道题就编完了的第八题 还差两道题就编完了的第九题 太好啦终于编完了 为啥一周六天早八阿 瞎编乱造第一题…...
什么是语法糖?Java中有哪些语法糖?
本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理1 语法糖语法糖(Syntactic Sugar&#…...
STM32学习(五)
GPIO General Purpose Input Output,通用输入输出端口,简称GPIO。 作用: 采集外部器件的信息(输入)控制外部器件的工作(输出) GPIO特点 1,不同型号,IO口数量可能不一样…...
STM32的CAN总线调试经验分享
相关文章 CAN总线简易入门教程 CAN总线显性电平和隐性电平详解 STM32的CAN总线调试经验分享 文章目录相关文章背景CAN总线CAN控制器CAN收发器调试过程硬件排查CAN分析仪芯片CAN控制器调试总结背景 最近负责的一个项目用的主控芯片是STM32F407IGT6,需要和几个电机控…...
深度剖析自定义类型(结构体、枚举、联合)——“C”
各位CSDN的uu们你们好呀,今天,小雅兰的内容是心心念念的结构体啦,其实在此之前,我也写过结构体的知识点,只是并没有很深入,那么,今天我会仔细来学习自定义类型的知识点,下面…...
《水经注地图服务》发布的全球影像数据在水经微图中调用
(本文首发于“水经注GIS”公号,订阅“水经注GIS”公号,为你分享更多GIS技术 )1、引言古人云:“工欲善其事,必先利其器。”意思是说:工匠想要使他的工作做好,一定要先让工具锋利&…...
MyBatis --- 缓存、逆向工程、分页插件
一、MyBatis的缓存 1.1、MyBatis的一级缓存 一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访问 使一级缓存失效的四种情况: 1、…...
vue3自定义svg图标组件
可参考: 未来必热:SVG Sprites技术介绍 懒人神器:svg-sprite-loader实现自己的Icon组件 在Vue3项目中使用svg-sprite-loader 前置知识 在页面中,虽然可以通过如下的方式使用img标签,来引入svg图标。但是,…...
智能火焰与烟雾检测系统(Python+YOLOv5深度学习模型+清新界面)
摘要:智能火焰与烟雾检测系统用于智能日常火灾检测报警,利用摄像头画面实时识别火焰与烟雾,另外支持图片、视频火焰检测并进行结果可视化。本文详细介绍基于智能火焰与烟雾检测系统,在介绍算法原理的同时,给出Python的…...
Java实习生------JUC并发编程(多线程)10道面试题打卡⭐⭐⭐
目录 并行和并发有什么区别? 线程和进程有什么区别? 创建线程有哪几种方式? runnable和callable有什么区别? 线程的状态及转换? sleep()和wait()的区别? run()和start()有什么区别? 在…...
ChatGPT和百度文心一言写用例,谁更强?
文心一言发布的第一时间,就排队申请了邀请码,昨晚看了下,邀请码已经到手,索性就拿一个例子试了一下,看看哪个能够真正意义上的提高生产力,最简单的录制了个GIF动画如下:问题:你是一个…...
设计模式总结
设计模式的六大原则 开放-封闭原则(OCP) (总原则) Open-Close Principle:该对扩展开放,对修改关闭。 目的就是保证程序的扩展性好,易于维护和升级。 开放-封闭原则是面向对象设计的核心所在, 开闭原则是Java世界里最基础的设计原则。 开闭…...
【K8S系列】深入解析Pod对象(一)
目录 序言 1.问题引入 1.1 问题描述 2 问题解答 2.1 pod 属性 2.1.1 NodeSelector 2.1.2 HostAliases 2.1.3 shareProcessNamespace 2.1.4 NodeName 2.1.5 其他pod属性 2.2 容器属性 2.2.1 ImagePullPolicy 2.2.2 Lifecycle 3 总结 4. 投票 序言 任何一件事情&am…...
JVM学习.02 内存分配和回收策略
1、前言《JVM学习.01 内存模型》篇讲述了JVM的内存布局,其中每个区域是作用,以及创建实例对象的时候内存区域的工作流程。上文还讲到了关于对象存货后,会被回收清理的过程。今天这里就着重讲一下对象实例是如何被清理回收的,以及清…...
logstash+elasticsearch+Kibana(ELK)日志收集
文章目录一.安装ELK 7.17二.为Elasticsearch设置密码三.配置logstash四.springboot整合logstash五.spring整合Elastic Search一.安装ELK 7.17 不要一股脑执行以下语句,请观察修改要修改的地方 安装logstash # logstash安装docker run -d --name logstash \-p 5043:5043 -p 5…...
今天面试了一个2年Java经验的
今天去面试了一个26岁的程序员,看了简历,2年经验,本科,写得很牛叉。 Spring cloud alibaba全家桶、redis,分布式锁,服务调用,数据库事务,线程,Zookeeper、Dubbo 、Rabbi…...
逻辑覆盖测试用例设计
逻辑覆盖测试用例设计 实验目标 能够依据程序画出程序流程图理解常用覆盖方法的内涵理解常用覆盖方法的强弱关系能够使用常用覆盖方法设计测试用例 背景知识 白盒测试通常采用静态测试方法和动态测试方法开展。动态测试是参照系统需求或测试规则,通过预先设计一…...
面试官:说一下MySQL中的锁机制吧
5. 1MySQL有哪些锁? 为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制也为实现MySQL的各个隔离级别提供了保证。 锁冲突 也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要,也更加…...
STL库中list的迭代器实现痛点分析
前文本篇文章准备换个模式,之前都是先详解模拟实现,但是模拟实现的基本逻辑大多数老铁都是明白的,所以我们这次主要讲解STL库中list的独特性,也就是模拟实现中的重难点文末有模拟实现的源码一,list实现的特殊类list实现…...
字符编码对比(GBK、Unicode、UTF-8)
摘要我们在网上能看到各种文字和符号,那么它们是怎么存储和转化的,还有我们常常提及的UTF-8,为什么都要设置这种编码方式,这里就探讨下。字符集字符集:就是各国文字、符号、数字的集合。常见的字符集有:ASC…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...
