Week 14
代码源每日一题Div2
106. 订单编号
原题链接:订单编号
思路:这题本来没啥思路,直到获得了某位佬的提示才会做(
我们可以用set来维护一些区间,这些区间为 pair 类型,表示没有使用过的编号,每次我们只需要用set容器中的lower_bound函数来找到一个上界大于等于该编号的区间,于是就容易看出新的编号为该区间的下界和原编号的较大值。获得新编号后我们需要将此时的区间进行分割,以新编号为中点将区间分为左右两块,表示新的两个其中的编号没有使用过的区间。重复此操作即可解决这道题。
代码:
#include <bits/stdc++.h>
using namespace std;
int n, a[500005];
set<pair<int, int> > s;
int main(){cin >> n;for(int i = 1; i <= n; i++){cin >> a[i];}s.insert(make_pair(2e9, 1));for(int i = 1; i <= n; i++){auto it = s.lower_bound({a[i], 0});int l = it->second, r = it->first;int num = max(l, a[i]);if(num + 1 <= r) s.insert({r, num + 1});if(num - 1 >= l) s.insert({num - 1, l});s.erase(it);cout << num << " ";}return 0;
}
107. 饿饿 饭饭
原题链接:饿饿 饭饭
思路:设给当前的所有人都打一次饭为一轮,则我们可以用二分来找到一共需要多少轮才能把 k 次饭全部打完。找到总轮数后再用队列模拟最后一轮的情况即可。
代码:
#include <bits/stdc++.h>
using namespace std;
long long n, k, a[100005], sum, res;
queue<long long> q;
int main(){cin >> n >> k;for(int i = 1; i <= n; i++){cin >> a[i];sum += a[i];}if(sum < k){cout << -1 << endl;return 0;}int st = 0, ed = 1e9;while(st <= ed){sum = 0;long long mid = (st + ed) / 2;for(int i = 1; i <= n; i++){sum += min(a[i], mid);}if(sum >= k) ed = mid - 1;else st = mid + 1, res = mid;}sum = 0;for(int i = 1; i <= n; i++){sum += min(a[i], res);a[i] = max(a[i] - res, (long long)0);if(a[i] > 0) q.push(i);}k -= sum;for(int i = 0; i < k; i++){if(a[q.front()] == 1) q.pop();else{q.push(q.front());a[q.front()] -= 1;q.pop();}}while(!q.empty()){cout << q.front() << " ";q.pop();}return 0;
}
204. 加一
原题链接:加一
思路:可以利用动态规划来先对数字加一后的长度进行预处理,设 dp[i][j] 为数字 j 经过·i 次加一操作后的长度,则状态转移方程为
dp[i + 1][j - 1] = dp[i][j], 1<= j <= 9
由于 9 进行加一后会变为10, 因此此时的长度为 0 和 1 上一次操作后的长度之和, 因此状态转移方程为
dp[i + 1][9]=(dp[i][0] + dp[i][1]) % (int)(1e9 + 7)
预处理后一次读入每一位数字并将结果相加即可
代码:
#include<bits/stdc++.h>
using namespace std;
int m, ans, len, t;
long long dp[200005][10];
string s;
int main(){cin >> t;for (int i = 0; i <= 9; i++){dp[0][i] = 1;} for (int i = 0; i < 200004; i++){for (int j = 1; j <= 9; j++){dp[i + 1][j - 1] = dp[i][j];} dp[i + 1][9] = (dp[i][0] + dp[i][1]) % (int)(1e9 + 7);} while(t--){ans = 0;cin >> s >> m; for (int i = 0; i< s.size(); i++){ans = (ans + dp[m][s[i]-'0']) % (int)(1e9 + 7);} printf("%d\n", ans);} return 0;
}
205. 跳跳
原题链接:跳跳
思路:由题意,一种魔法代表一组点之间连线的斜率,因此遍历所有点并算出每两点间的斜率,并将算出的斜率存入set容器来避免重复,最终set容器中元素的数量 * 2 即为最终答案。
为什么要乘二?因为传送是有方向的,点1传送到点2与点2传送到点1是两种不同情况
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
struct point{double x, y;
} p[505];
set<double> k;
int main(){cin >> n;for(int i = 1; i <= n; i++){cin >> p[i].x >> p[i].y;} for(int i = 1; i <= n; i++){for(int j = 1; j < i; j++){double tmp = (p[i].y - p[j].y) / (p[i].x - p[j].x);k.insert(tmp);}}cout << k.size() * 2;return 0;
}
206. 异或和或
原题链接:异或和或
思路:通关观察题目要求,我们可以找到这样的规律:
(0, 0) -> (0, 0)
(0, 1) / (1, 0) -> (1, 1) -> (1, 0) / (0, 1)
(1, 1) -> (0, 1)
因此,在一个序列中,在变化某一位的数字时只要在此序列中的其他位置存在数字 1 则那一位的数字就一定可以变成与下一个序列相应位置一样的数字。又由上述规律,(0,1)与(1,0)可以随意转换,因此当两个序列有相同数量的 1 时,一定可以将两序列变换为一样的。
代码:
#include <bits/stdc++.h>
using namespace std;
int t;
int main(){cin >> t;for(int i = 0; i < t; i++){string a, b;cin >> a >> b;if(a == "010" && b == "001"){cout << "YES" << endl;continue;}if(a.size() != b.size()){cout << "NO" << endl;continue;} for(int j = 0; j < a.size(); j++){bool flag = false;if(a[j] != b[j]){for(int k = 0; k < a.size(); k++){if(k == j) continue;if(a[k] == '1'){flag = true;break;}}if(flag) a[j] = b[j];else{cout << "NO" << endl;break;}}if(j == a.size() - 1 && a == b) cout << "YES" << endl;}}return 0;
}
207. 01序列
原题链接:01序列
思路:通过观察可以发现,当一个满足条件的子串的两端均为1时,此时若加入子串左边的0序列则加入0后的子串依然能满足条件,且每加入一个0满足条件的子串数量都能增加1个,同时,此时若向右加入0序列,则每次增加的满足条件的子串数量为左边加入0后满足条件的子串的总数。由此规律即可解决该问题。
代码:
#include <bits/stdc++.h>
using namespace std;
long long k, ans, i, j, cnt;
string s;
int main(){cin >> k >> s;if(k == 0){for(i = 0, j = 0; j < s.size(); i++, j++){while(j < s.size() && s[j] == '1') j++;i = j;while(j < s.size() && s[j] == '0') j++;ans += (j - i) * (j - i + 1) / 2;}cout << ans;return 0;}for(i = 0, j = 0; j < s.size(); i++, j++){while(j < s.size()){if(s[j] == '1') cnt++;if(cnt == k) break;j++;}if(cnt == k){int r = j + 1;while(r < s.size() && s[r] == '0'){r++;}while(i < s.size() && s[i] == '0'){ans += r - j;i++;}ans += r - j;cnt--;}}cout << ans;return 0;
}
301. 出栈序列判断
原题链接:出栈序列判断
思路:由于数字升序入栈,那么数字正常出栈时一定是降序排列,因此如果输出的序列中出现了升序的数字,那么此时就需要把出现升序的第一个数字立刻pop出去。由此规律就可以写代码了。
代码:
#include <bits/stdc++.h>
using namespace std;
int n, a[100005], cnt1 = 1, cnt2 = 1;
int read(){int f=1,k=0;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar(); }while(c>='0'&&c<='9'){k=k*10+c-'0';c=getchar(); }return f*k;
}
int main(){n = read();for(int i = 1; i <= n; i++){a[i] = read();}for(int i = 1, j = 2; j <= n; j++){if(a[j] > a[i]){for(int k = cnt1; k <= a[i]; k++){printf("push %d\n", k);cnt1++;}for(int k = 1; k <= j - i; k++){printf("pop\n");cnt2++;}i = j;}}for(int k = cnt1; k <= n; k++){printf("push %d\n", k);}for(int k = cnt2; k <= n; k++){printf("pop\n");}return 0;
}
302. 序列维护
原题链接:序列维护
思路:简单模拟插入和删除数组元素的过程即可。
代码:
#include <bits/stdc++.h>
using namespace std;
int m, a[1005], len;
string s;
int main(){cin >> m;for(int i = 0; i < m; i++){cin >> s;if(s == "insert"){int x, y;cin >> x >> y;for(int j = len - 1; j >= x; j--){a[j + 1] = a[j];}a[x] = y;len++;}else if(s == "query"){int k;cin >> k;cout << a[k - 1] << endl;}else{int x;cin >> x;for(int j = x; j < len; j++){a[j - 1] = a[j];}len--;}}return 0;
}
303. 网格判断
原题链接:网格判断
思路:直接遍历每一行和每一列,依照题意对其中的字符进行判断即可。
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
char mp[30][30];
bool checkCount(){for(int i = 1; i <= n; i++){int cntw = 0, cntb = 0;for(int j = 1; j <= n; j++){if(mp[i][j] == 'W') cntw++;else if(mp[i][j] == 'B') cntb++;} if(cntw != cntb) return false;}for(int i = 1; i <= n; i++){int cntw = 0, cntb = 0;for(int j = 1; j <= n; j++){if(mp[j][i] == 'W') cntw++;else if(mp[j][i] == 'B') cntb++;}if(cntw != cntb) return false;}return true;
}
bool checkContinue(){for(int i = 1; i <= n; i++){for(int j = 1; j <= n - 2; j++){if(mp[i][j] == mp[i][j + 1] && mp[i][j + 1] == mp[i][j + 2]) return false;}}for(int i = 1; i <= n; i++){for(int j = 1; j <= n - 2; j++){if(mp[j][i] == mp[j + 1][i] && mp[j + 1][i] == mp[j + 2][i]) return false;}}return true;
}
int main(){cin >> n;for(int i = 1; i <= n; i++){for(int j = 1; j <= n; j++){cin >> mp[i][j];}}if(checkCount() && checkContinue()) cout << 1;else cout << 0;return 0;
}
304. 整齐的数组
原题链接:整齐的数组
思路:遍历数组中的所有元素,找到每一个元素的差的绝对值,并求出这些差的最大公因数即可。
代码:
#include <bits/stdc++.h>
using namespace std;
int t, a[50], n;
int main(){cin >> t;for(int i = 0; i < t; i++){cin >> n;for(int j = 1; j <= n; j++){cin >> a[j];}int ans = 0;for(int j = 1; j <= n; j++){for(int k = 1; k < j; k++){int tmp = fabs(a[j] - a[k]);ans = ans == 0 ? tmp : __gcd(ans, tmp);}}if(ans != 0) cout << ans << endl;else cout << -1;}return 0;
}
相关文章:
Week 14
代码源每日一题Div2 106. 订单编号 原题链接:订单编号 思路:这题本来没啥思路,直到获得了某位佬的提示才会做( 我们可以用set来维护一些区间,这些区间为 pair 类型,表示没有使用过的编号,每次…...
【微信小程序】-- 使用 Git 管理项目(五十)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
leetcode每日一题:134. 加油站
系列:贪心算法 语言:java 题目来源:Leetcode134. 加油站 题目 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[…...
开放式基金实时排行 API 数据接口
开放式基金实时排行 API 数据接口 多维度参数返回,实时数据,类型参数筛选。 1. 产品功能 返回实时开放式基金排行数据可定义查询基金类型参数;多个基金属性值返回多维指标,一次查询毫秒级返回;数据持续更新与维护&am…...
Android开发中synchronized的实现原理
synchronized的三种使用方式 **1.修饰实例方法,**作用于当前实例加锁,进入同步代码前要获得当前实例的锁。 没有问题的写法: public class AccountingSync implements Runnable{//共享资源(临界资源)static int i0;/*** synchronized 修饰实例方法*/p…...
【华为OD机试 2023最新 】 统一限载货物数最小值(C++)
题目描述 火车站附近的货物中转站负责将到站货物运往仓库,小明在中转站负责调度2K辆中转车(K辆干货中转车,K辆湿货中转车)。 货物由不同供货商从各地发来,各地的货物是依次进站,然后小明按照卸货顺序依次装货到中转车,一个供货商的货只能装到一辆车上,不能拆装,但是…...
【生活工作经验 十】ChatGPT模型对话初探
最近探索了下全球大火的ChatGPT,想对此做个初步了解 一篇博客 当今社会,自然语言处理技术得到了迅速的发展,人工智能技术也越来越受到关注。其中,基于深度学习的大型语言模型,如GPT(Generative Pre-train…...
基于Spring Boot房产销售平台的设计与实现【源码+论文】分享
开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 摘要 信息技术的发展…...
不同类型的电机的工作原理和控制方法汇总
电机控制是指对电机的启动、调速(加速、减速)、运转方向和停止进行的控制,不同类型的电机有着不同的工作原理和控制方法。 一、无刷电机 无刷电机是由电机主体和电机驱动板组成的一种没有电刷和换向器的机电一体化产品。在无刷电机中…...
计算机网络管理 TCP三次握手的建立过程,Wireshark抓包分析并验证TCP三次握手建立连接的报文
⬜⬜⬜ ---🟧🟨🟩🟦🟪 (*^▽^*)欢迎光临 🟧🟨🟩🟦🟪---⬜⬜⬜ ✏️write in front✏️ 📝个人主页:陈丹宇jmu 🎁欢迎各位→…...
HTTP/2.x:最新的网页加载技术,快速提高您的SEO排名
2.1 http2概念HTTP/2.0(又称HTTP2)是HTTP协议的第二个版本。它是对HTTP/1.x的更新,旨在提高网络性能和安全性。HTTP/2.0是由互联网工程任务组(IETF)标准化的,并于2015年发布。2.2 http2.x与http1.x区别HTTP…...
机器学习----线性回归
第一关:简单线性回归与多元线性回归 1、下面属于多元线性回归的是? A、 求得正方形面积与对角线之间的关系。 B、 建立股票价格与成交量、换手率等因素之间的线性关系。 C、 建立西瓜价格与西瓜大小、西瓜产地、甜度等因素之间的线性关系。 D、 建立西瓜…...
MS2131 USB 3.0 高清音视频采集+HDMI 环出+混音处理芯片 应用网络直播一体机
MS2131 是一款 USB 3.0 高清视频和音频采集处理芯片,内部集成 USB 3.0 Device 控制器、 数据收发模块、音视频处理模块。MS2131 可以通过 USB 3.0 接口将 HDMI 输入的音视频信号传 送到 PC、智能手机、平板电脑上预览或采集。MS2131 支持 HDMI 环出功能,…...
基于堆与AdjustDown的TOP-K问题
TIPSTOP-K问题TOP-K问题:就是说现在比如说有n个数据,然后需要从这n个数据里面找到最大的或最小的前k个。一般来讲思路的话就是:先把这n个数据给他建一个堆,建堆完成之后,然后就去调堆,然后大概只需要调k次&…...
在CentOS上安装Docker引擎
1,先决条件#### 1-1操作系统要求1-2 卸载旧版本 2,安装方法2-1使用存储库安装设置存储库安装 Docker 引擎 本文永久更新地址: 官方地址:https://docs.docker.com/engine/install/centos/ 1,先决条件 #### 1-1操作系统要求 要安装 Docker Engine,您需要…...
【10】核心易中期刊推荐——模式识别与机器学习
🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…...
【数据结构】并查集
目录 一:用途 二:实现 O(1) 三:例题 例题1:集合 例题2:连通图无向 例题3:acwing 240 食物链 一:用途 将两个集合合并询问两个元素是否在一个集合当中 二:实现 O(1) 每…...
软考--网络攻击分类
网络攻击的主要手段包括口令入侵、放置特洛伊木马程序、拒绝服务(DoS)攻击、端口扫描、网络监听、欺骗攻击和电子邮件攻击等。口令入侵是指使用某些合法用户的账号和口令登录到目的主机,然后再实施攻击活动。特洛伊木马(Trojans)程序常被伪装…...
蓝桥杯刷题冲刺 | 倒计时17天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.长草2.分考场1.长草 题目 链接: 长草 - 蓝桥云课 (lanqiao.cn) 题目描述 小明有一…...
冲击蓝桥杯-并查集,前缀和,字符串
目录 前言 一、并查集 1、并查集的合并(带路径压缩) 2、询问是否为同一个集合 3、例题 二、前缀和 1 、前缀和是什么 2、经典题目 三- 字符串处理 1、字符串的插入 2、字符串转化为int类型 3、字符反转 前言 并查集合前缀,字符串…...
【matlab学习笔记】线性方程组求解方法
线性方程组求解方法2.1 求逆法实现方式例子2.2 分解法LU分解(Doolittle分解)实现方法例子QR分解法实现方法例子Cholesky 分解法实现方法例子奇异值分解法实现方法例子Hessenberg 分解实现方法例子Schur 分解实现方法例子2.3 迭代法逐次迭代法里查森迭代法…...
Python带你一键下载到最新章节,不付费也能看
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 完整源码、素材皆可点击文章下方名片获取此处跳转 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests 发送请求/第三方模块 模块安装:win R 输入cmd 输入安装命令 pip install 模块名 如果…...
【sentinel】熔断降级规则详解及源码分析
概述 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方API等。例如,支付的时候,可能需要远程调用银联…...
ffplay源码分析-main函数入口分析
ffplay源码分析-main函数入口分析 基于ffmpeg6.0源码分析。 流程 使用ffplay播放视频文件,会触发main函数的调用。main函数中会进行以下操作: 从命令行中解析日志级别、日志是否需要落文件、是否要输出banner信息。banner信息包含版权、库的版本。注…...
C++三种继承方式
C继承的一般语法为:class 派生类名:[继承方式] 基类名{派生类新增加的成员};继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的)、private(私有的)和 protected&#…...
【Android -- 软技能】《软技能:代码之外的生存指南》之好书推荐(一)
前言 这是一本由美国的一个软件开发人员写的,但书中除了有 Java 、C# 几个单词外,没有一行代码。 因为这本书讲的是代码之外的东西。 文章目录结构: 1. 职业 从业心态:说白了就是要有责任心,把每份工作要当成是自…...
Nginx可视化管理工具 - Nginx Proxy Manager
一、介绍 nginx-proxy-manager 是一个反向代理管理系统,它基于Nginx,具有漂亮干净的 Web UI。还可以获得受信任的 SSL 证书,并通过单独的配置、自定义和入侵保护来管理多个代理。 其官网地址如下: https://nginxproxymanager.com/ 二、安装 第一步:192.168.1.108服务…...
https是如何保证安全的
在学习http与https的区别的时候,我们通常从以下几点出发:http是超文本传输协议,是明文传输,有安全风险,https在TCP和http网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输http连接简单,三…...
ubuntu下使用GCC开发单片机的过程
以下是一个简单的单片机C程序示例,实现的功能是控制LED灯的闪烁: #include <reg52.h> // 导入单片机的寄存器定义void main() {while(1) { // 无限循环P1 = 0x00; // P1口输出低电平delay(1000); // 延时1秒P1 = 0xff; // P1口输出高电平delay(1000); // 延时1秒…...
人工智能能否取代软硬件开发工程师
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 人工智能发展趋势 随着AI技术的不断发展,它正在改变我们的生活方式、商业模式和工作方式。人工智能技术的发展一直处于快速变化和持续创新的状态,以下…...
做加盟网站哪个最好/网络舆情分析报告
由不勤劳的图书管理员带入了分块的坑,深深地被其暴力与优雅所征服。分块的实质就是将暴力块状封装起来,一整块的部分就一整块处理,零碎的部分就怎么暴力怎么来。因为分块大小的原因,限制了零碎部分数据的数量级,所以复…...
保健品网站dede模板/有网站模板怎么建站
a 10 b 11 c 12 d 13 e 14 f 15 16位进制加减运算 3D25H - 05C3H 3762H 3D25-05C3 5-322-C2-12 (162-12) 6 (由于2-12不够减,所以向前借1 即16)D-5(13-1-5) 7(13-1是因为2-12不够而被借走了一位)3-03 结果为:3762H 3D25 3 13 2 5 05C3 0 5 12 3 -…...
厦门橄榄网站建设/重庆seo1
名称:Multisim13.0 语言:简体中文 安装环境:Win7/Win8/Win1032/64位下载链接:https://pan.baidu.com/s/1jMmyn_0rPFWPcQ1S31BfSg提取码:v55j后台回复【Multisim13.0】获取Multisim是以Windows为基础的仿真工具&#…...
浙江疫情/兰州网络优化seo
标准霍夫变换的原理就是把图像空间转换成参数空间(即霍夫空间),例如霍夫变换的直线检测就是在距离 -角度空间内进行检测。圆可以表示为: ( x − a ) 2 + ( y − b ) 2 = r 2 (x-a)^2+(y-b)^2 = r^2...
济南网站建设 泉诺/网站搭建详细教程
参考 C训练 (csdn.net) 目录 04HTTP 常用请求头 用户凭证Cookie Session 习题 06HTTPS 为什么使用HTTPS 2、SSL 3、TLS 4、证书与证书链 习题 07OSI七层模型 习题 08IP基础 1、IP分类 2、小知识 3、 网络类型 习题 09IPv6 10网络拓扑 习题 11域名解析 习…...
海南网站建设哪里好/谷歌搜索引擎363
一、ResNet模型接上一篇文章的内容,下面这种CNN模型就更加经典,并且也是目前运用最为广泛的模型了。在2015年,何凯明提出了152层的ResNet,以3.6%的误差摘得了2015年ILSVRC比赛的桂冠,同时ResNet的提出解决了神经网络中因为网络深度…...