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

笔试专题(十二)

文章目录

  • 主持人调度
    • 题解
    • 代码
  • 小红的ABC
    • 题解
    • 代码
  • 不相邻取数
    • 题解
    • 代码
  • 空调遥控
    • 题解
    • 代码

主持人调度

题目链接
在这里插入图片描述

题解

1. 排序
2. 先按左端点的大小进行排序,保证时间是连续的,如果后一个点的左端点大于等于前一个点的右端点就是和法的,否则就不合法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码

class Solution 
{
public:bool hostschedule(vector<vector<int>>& s) {// 按照左端点排序// 这个二维的数组是按左端点排序的sort(s.begin(),s.end());// 排序为了保证时间段时连续的// 二维的vector是先按第一个元素排序,再按第二个元素排序的int k = s[0][1];int p = 0,q = 0;int n = s.size(),m = 2;for(int i = 1;i < n;i++){for(int j = 0;j < m;j++){if(j == 0) p = s[i][j];// 左端点if(j == 1) q = s[i][j];// 右端点}if(p >= k){k = q;}else {return false;}}return true;}
};

小红的ABC

题目链接
在这里插入图片描述

题解

1. 找规律
2. 最短就是2或者3的情况,其他情况的子集也是2或者3

在这里插入图片描述

代码

#include<iostream>
#include<string>
using namespace std;int main()
{string s;cin >> s;int n = s.size();int ans = -1;// 没有回文子串for(int i = 0;i < n;i++){if(i + 1 < n && s[i] == s[i+1]){ans = 2;break;}if(i + 2 < n && s[i] == s[i+2]){ans = 3;}}cout << ans << '\n';return 0;
}

不相邻取数

题目链接
在这里插入图片描述

题解

1. 动态规划,线性dp
2. 类似于打家劫舍问题,简单多状态,一个位置选或者不选
在这里插入图片描述

代码

#include <iostream>
#include<algorithm>
using namespace std;const int N = 2e5 + 10;
int a[N];
int f[N];
int g[N];int main()
{int n;cin >> n;for(int i = 0;i < n;i++) cin >> a[i];f[0] = a[0];for(int i = 1;i < n;i++){f[i] = a[i] + g[i-1];g[i] = max(g[i-1],f[i-1]);}cout << max(f[n-1],g[n-1]) << '\n';return 0;
}

空调遥控

题目链接

在这里插入图片描述

题解

1. 排序 + 二分
2. 先枚举温度,最小的温度到最大的温度,再写出该温度的范围是k+p和k-p是符合要求的区间,再用二分查找找到左端点的下标和右端点的下标+1即是此次温度的最多人数,最后求最多的人数
3. 滑动窗口 + 排序
温度的范围是[t - p,t + p],那么一定存在一个区间内的最大数 - 最小数 <= 2 * p,求区间的最长的长度

在这里插入图片描述

代码

// 排序 + 二分 O(n*logn + n*logn)
#include<iostream>
#include<algorithm>
using namespace std;const int N = 1e6 + 10;
int a[N];
int p,n;int main()
{cin >> n >> p;for(int i = 0;i < n;i++) cin >> a[i];// 排序 + 二分sort(a,a + n);int b = a[0],c = a[n-1];int ans = 0;// 枚举温度for(int i = b;i <= c;i++){int left = 0,right = n-1;int t1 = i + p;int t2 = i - p;int p1 = 0,p2 = 0;while(left < right){int mid = left + (right - left) / 2;if(a[mid] >= t2) right = mid;else{left = mid + 1;    }}p1 = left;left = 0,right = n - 1;while(left < right){int mid = (left + right + 1) / 2;if(a[mid] <= t1) left = mid;else right = mid - 1;}p2 = left;ans = max(ans,p2-p1 + 1);}cout << ans << '\n';return 0;
}// 滑动窗口 + 排序 O(n*logn + n)
#include<iostream>
#include<algorithm>
using namespace std;const int N = 1e6 + 10;
int a[N];int main()
{int n,p;cin >> n >> p;for(int i = 0;i < n;i++) cin >> a[i];sort(a,a+n);// 区间小于等于2pint k = 2 * p;int left = 0,right = 0;int ans = 0;while(right < n){while(a[right] - a[left] > k){left++;}if(a[right] - a[left] <= k) ans = max(ans,right - left + 1);right++;}cout << ans << '\n';return 0;
} 

相关文章:

  • 【动态导通电阻】 GaN PiN二极管电导调制对动态 RON 的影响
  • PDF编辑器:Foxit PDF Editor Pro 版功能解析
  • Ubuntu如何查看硬盘的使用情况,以及挂载情况。
  • 浏览器自动化工具:Selenium 和 Playwright
  • 什么是全景相机?
  • 机器人--相机
  • 学习海康VisionMaster之线圆测量
  • stm32wb55rg (4) 启用usart串口
  • OpenAI Embedding 和密集检索(如 BERT/DPR)进行语义相似度搜索有什么区别和联系
  • transformer-实现单层Decoder 层
  • 【探寻C++之旅】第十二章:异常
  • RTDETRv2 pytorch训练
  • 部署一个自己的Spring Ai 服务(deepseek/通义千问)
  • kotlin flatMap 变换函数的特点和使用场景
  • 亚远景-ASPICE认证:如何优化软件开发流程?
  • 极客天成受邀参加2050大会,共赴人工智能科技盛宴
  • IDEA新版本Local Changes
  • Java后端开发day39--方法引用
  • 【学习资源】知识图谱与大语言模型融合
  • 机器学习之五:基于解释的学习
  • 4月人文社科联合书单|天文学家的椅子
  • 张元济和百日维新
  • 汽车爆炸致俄军中将死亡嫌疑人被羁押,作案全过程披露
  • 伊朗港口爆炸已造成281人受伤
  • 乌方称泽连斯基与特朗普进行简短会谈
  • 饶权已任国家文物局局长