笔试题笔记#4、5 记录划水过程

embedded/2025/2/20 17:04:08/

1 一道必须手模双向链表才能过的题,还必须是C++ 

#include <iostream>using namespace std;const int N = 100010;
int l, r;
int n;// 每个节点的左节点和右节点
int L[N], R[N];
// 节点是否已经被使用
int ud[N];
// 剩余节点数量,当前起始节点,当前末尾节点
int remain, beg, ed;int main()
{cin >> l >> r;// 建立“链表”关系for(int i=l; i<=r; i++) {L[i] = i-1;R[i] = i+1;}cin >> n;beg = l, ed = r;remain = r-l+1;for(int i=0; i<n; i++) {int op, v;cin >> op >> v;if(op == 1) {// 不够分配if(remain < v) continue;while(v--) {// “孤立”当前节点R[L[beg]] = R[beg];L[R[beg]] = L[beg];ud[beg] = 1;remain--;// 更新起始节点beg = R[beg];}} else if(op == 2) {if(v < l || v > r || ud[v]) continue;// “孤立”当前节点R[L[v]] = R[v];L[R[v]] = L[v];// 如果指定分配的节点是首尾节点,要特殊处理一下if(v == beg) beg = R[v];else if(v == ed) ed = L[v];ud[v] = 1;remain--;} else {if(v < l || v > r || !ud[v]) continue;if(remain == 0) {// 当前资源全部用完,特殊处理beg = ed = v;} else {// 把当前节点放到最后,建立前后关系R[ed] = v;L[v] = ed;ed = v;}ud[v] = 0;remain++;}}cout << beg << endl;
}

2 一道按位操作的题,可以说是bitset实践了

#include <bits/stdc++.h>
using namespace std;bitset<1024> a, b;
int n; 
string s;void print(bitset<1024> x) {for(int i = 0 ; i < n ; i ++) {cout << x[i]; }cout << endl;
}int main() {cin >> n; int idx = 0; while(cin >> s) {int now = 0; for(int i = 2 ; i < s.size() ; i ++) { if(s[i] >= '0' && s[i] <= '9') { now = now * 16 + s[i] - '0'; } else { now = now * 16 + s[i] - 'A' + 10; }}stack<int> st;for(int i = 0 ; i < 16 ; i ++) { st.push(now & 1); now >>= 1; }for(int i = 0 ; i < 16 && idx < n ; i ++, idx++) {a[idx] = st.top(); st.pop();}}for(int i = 0 ; i < n ; i ++) {b[i] = 1; }int ans = 0; int ans1 = -1, ans2 = -1; // 枚举右移情况for(int i = 0 ; i < n ; i ++) {if((a << i & b | a).count() == n) { // 右移i位后,检查是否可以全1ans1 = i; // 记录右移的最小位移数ans++;break; // 只需要找到最少的位移次数,找到即可跳出}}// 枚举左移情况for(int i = 0 ; i < n ; i ++) {if((a >> i & b | a).count() == n) { // 左移i位后,检查是否可以全1ans2 = i; // 记录左移的最小位移数ans++;break; // 只需要找到最少的位移次数,找到即可跳出}}// 如果没有任何平移方案,或a本身已是全1串,直接输出0if(ans == 0 || a.count() == n) {cout << 0 << endl;return 0;}// 输出可以使其全1的平移方案数cout << (ans1 != -1) + (ans2 != -1) << endl;// 输出右移方案if(ans1 != -1) {cout << "+" << ans1 << endl;print((a ^ b) >> ans1); }// 输出左移方案if(ans2 != -1) {cout << "-" << ans2 << endl;print((a ^ b) << ans2); }
}

3 C++复习:继承、多态、多重继承相关


http://www.ppmy.cn/embedded/162340.html

相关文章

【删除tomcat默认管理控制台】

停止Tomcat&#xff1a; ./catalina.sh stop 删除管理控制台应用&#xff1a; 进入Tomcat的webapps目录&#xff1a; cd /path/to/tomcat/webapps List item 删除manager和host-manager文件夹&#xff1a; rm -rf manager host-manager 启动Tomcat&#xff1a; ./catali…

Docker 存储管理:卷、绑定挂载、临时存储

Docker 提供了多种存储方式&#xff0c;用于容器中的数据存储。根据不同的使用场景&#xff0c;Docker 提供了 卷&#xff08;Volumes&#xff09;、绑定挂载&#xff08;Bind Mounts&#xff09; 和 临时存储&#xff08;Tmpfs&#xff09; 等存储方式。每种存储方式有不同的特…

ChatGPT macOS 桌面应用让你的编程体验更上一层楼

高效开发必备&#xff1a;ChatGPT macOS 桌面应用亮点盘点 ©作者|Ninja Geek 来源|神州问学 通过 macOS 版 ChatGPT 应用&#xff0c;已经能够更好的和你的生产力工具无缝配合工作。 大概在三四周之前&#xff0c;Anthropic 在 Claude 上推出了一项名为 Computer Use 的功…

Baklib知识中台构建企业智能运营核心架构

内容概要 在数字化转型的浪潮中&#xff0c;企业对于知识的系统化管理需求日益迫切。Baklib作为新一代的知识中台&#xff0c;通过构建智能运营核心架构&#xff0c;为企业提供了一套从知识汇聚到场景化落地的完整解决方案。其核心价值在于将分散的知识资源整合为统一的资产池…

App UI自动化--Appium学习--第二篇

如果第一篇在运行代码的时候出现问题&#xff0c;建议参考我的上一篇文章解决。 1、APP界面信息获取 adb logcat|grep -i displayed代码含义是获取当前应用的包名和界面名。 根据日志信息修改代码当中的包名和界面名&#xff0c;就可以跳转对应的界面。 2、界面元素获取 所…

从概念到落地:DeepSeek携手蓝耘平台,解锁AI赋能生活的实践

欢迎来到ZyyOvO的博客✨&#xff0c;一个关于探索技术的角落&#xff0c;记录学习的点滴&#x1f4d6;&#xff0c;分享实用的技巧&#x1f6e0;️&#xff0c;偶尔还有一些奇思妙想&#x1f4a1; 本文由ZyyOvO原创✍️&#xff0c;感谢支持❤️&#xff01;请尊重原创&#x1…

网络安全要学python 、爬虫吗

网络安全其实并不复杂&#xff0c;只是比普通开发岗位要学习的内容多一点。无论是有过编程基础还是零基础的都可以学习的。网络安全目前可就业的岗位从技术上可分为两部分&#xff1a;web安全和二进制逆向安全。web安全是网络安全的入门方向&#xff0c;内容简单&#xff0c;就…

数论补充 之 前后缀分解问题

文章目录 [0,i-1] 和 [i1,n-1] 共同作用3334,数组的最大因子得分 对于前缀分解问题&#xff0c;我愿把它分为几个大问题&#xff1a;[0,i] 或 [i,n-1] 或 [l,r],或 [0,i-1] 和 [i1,n-1] 共同作用的问题 [0,i-1] 和 [i1,n-1] 共同作用 3334,数组的最大因子得分 3334,数组的最大…