不往前做周赛了,平时就做每日一题
今天这套题太水了,权当复习一下substr和stoi
题目给你一个下标从 0 开始的字符串 details 。details 中每个元素都是一位乘客的信息,信息用长度为 15 的字符串表示,表示方式如下:
前十个字符是乘客的手机号码。
接下来的一个字符是乘客的性别。
接下来两个字符是乘客的年龄。
最后两个字符是乘客的座位号。
请你返回乘客中年龄 严格大于 60 岁 的人数。
示例 1:
123输入:details = ["7868190130M7522","5303914400F9211","9273338290F4010"]输出:2解释:下标为 0 ,1 和 2 的乘客年龄分别为 75 ,92 和 40 。所以有 2 人年龄大于 60 岁。
示例 2:
123输入:details = ["1313579440F2036","2921522980M5644"]输出:0解释:没有乘客的年龄大于 60 岁。
提示:
1 <= details.le ...
12345678910111213141516171819202122232425262728293031323334353637g++ -std=c++11 -Wall tutorial/tutorial-01-wget.cc -I _include/ -o twget报错:/data/tmp/tutorial-01-wget-f47913.o: In function `wget_callback(WFNetworkTask<protocol::HttpRequest, protocol::HttpResponse>*)':tutorial/tutorial-01-wget.cc:(.text+0x29c): undefined reference to `protocol::HttpHeaderCursor::next(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::bas ...
题目给你一个长度为 n 下标从 0 开始的整数数组 nums 。
我们想将下标进行分组,使得 [0, n - 1] 内所有下标 i 都 恰好 被分到其中一组。
如果以下条件成立,我们说这个分组方案是合法的:
对于每个组 g ,同一组内所有下标在 nums 中对应的数值都相等。
对于任意两个组 g1 和 g2 ,两个组中 下标数量 的 差值不超过 1 。
请你返回一个整数,表示得到一个合法分组方案的 最少 组数。
示例 1:
123456789101112输入:nums = [3,2,3,2,3]输出:2解释:一个得到 2 个分组的方案如下,中括号内的数字都是下标:组 1 -> [0,2,4]组 2 -> [1,3]所有下标都只属于一个组。组 1 中,nums[0] == nums[2] == nums[4] ,所有下标对应的数值都相等。组 2 中,nums[1] == nums[3] ,所有下标对应的数值都相等。组 1 中下标数目为 3 ,组 2 中下标数目为 2 。两者之差不超过 1 。无法得到一个小于 2 组的答案,因为如果只有 1 组,组内所有下标对应的数值都要相 ...
题目给你一个下标从 0 开始的整数数组 nums 。
如果下标三元组 (i, j, k) 满足下述全部条件,则认为它是一个 山形三元组 :
i < j < k
nums[i] < nums[j] 且 nums[k] < nums[j]
请你找出 nums 中 元素和最小 的山形三元组,并返回其 元素和 。如果不存在满足条件的三元组,返回 -1 。
示例 1:
123456输入:nums = [8,6,1,5,3]输出:9解释:三元组 (2, 3, 4) 是一个元素和等于 9 的山形三元组,因为: - 2 < 3 < 4- nums[2] < nums[3] 且 nums[4] < nums[3]这个三元组的元素和等于 nums[2] + nums[3] + nums[4] = 9 。可以证明不存在元素和小于 9 的山形三元组。
示例 2:
123456输入:nums = [5,4,8,7,10,2]输出:13解释:三元组 (1, 3, 5) 是一个元素和等于 13 的山形三元组,因为: - 1 < 3 < 5 - nums ...
CSAPP的前置gdb课程,学习一下基本操作
简介12345678910#include <iostream>int main(){ int j = 3; int k = 7; j +=k; k = j*2; std::cout<<"hello there"<<std::endl;}
使用gdb时,我们需要在g++后面加上-g:
12g++ -g -std=c++14 basic1.cc -o basic1gdb ./basic1
Command
run
运行程序
break
break后面可以加行号,可以加函数名:
在后面可以加条件 if condition
12break 7break main
例子:
1234567(gdb) break 7Breakpoint 1 at 0x40085c: file basic1.cc, line 7.(gdb) runStarting program: /home/hoshea/Desktop/gdb/basic1 Breakpoin ...
这一个lab还是汇编相关的实验
Part1 Code Injection Attackslevel1先将ctarget的反汇编弄出来
objdump -d ctarget > c.txt
12345678910111213void test(){ int val; val = getbuf(); printf("No exploit. Getbuf returned 0x%x\n", val);}void touch1() { vlevel = 1; printf("Touch!: You called touch1()\n"); validate(1); exit(0);}
其中,ctarget的流程就是执行test函数,然后输入字符串。
level1的要求就是调用getbuf()后,调用touch1函数
12345678900000000004017a8 <getbuf>: 4017a8: 48 83 ec 28 sub ...
开发笔记
未读CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,无需修改,非常方便。
本文主要讲述在Linux下如何使用CMake来编译我们的程序。
安装CMake实验机器用的是Ubuntu16.04
我们安装完CMake后,看一下cmake版本为3.24
简单样例文件准备我们新建一个文件夹,在里面创建一个hello.cpp
12345678#include <stdio.h> int main(void){ printf("Hello World\n"); return 0;}
再编写一个CMakeLists.txt,内容如下:
12345cmake_minimum_required (VERSION 2.8) project (demo) add_executable(main main.c)
第一行意思是表示cmake的版本最低要求是2.8
第二行意思是表示本工程信息,即工 ...
经典书籍学习
未读指令被编码为一个或多个字节序列组成的二进制格式,一个处理器支持的指令和指令的字节级编码称他为他的指令集体系结构(ISA)。
Y86-64指令体系结构Y86-64指令集是本书作者自己定义的一个简单指令集,与X86-64 相比,Y86-64 指令集的数据类型、指令和寻址方式都要少一些。定义一个指令集体系结构包括定义各种状态单元、指令集和它们的编码、一组编程规范和异常事件处理。
程序员可见状态包括如下的状态单元:
15个程序寄存器,每个程序寄存器存储一个64位的字,寄存器%rsp被入栈、出栈、调用和返回指令作为栈指针。
3个1位条件码,保存着最近的算数或逻辑指令所造成的影响的有关信息
程序计数器PC,存放当前正在执行指令的地址
内存从概念上来说就是一个很大的字节数组,保存着程序和数据
状态码stat,表明程序执行的总体状态,会指示是正常运行还是出现了某种异常
Y86-64指令以下是作者对Y86-64指令的定义,只包括8字节整数操作,寻址方式比较少,操作也少。图中左边是指令的汇编码表示,右边是字节编码:
movq指令分成了4个不同的指令:irmovq、rrmovq、mrmovq、rmm ...
第366场周赛,是一道贪心题
题目你有 n 颗处理器,每颗处理器都有 4 个核心。现有 n * 4 个待执行任务,每个核心只执行 一个 任务。
给你一个下标从 0 开始的整数数组 processorTime ,表示每颗处理器最早空闲时间。另给你一个下标从 0 开始的整数数组 tasks ,表示执行每个任务所需的时间。返回所有任务都执行完毕需要的 最小时间 。
注意:每个核心独立执行任务。
示例 1:
1234567输入:processorTime = [8,10], tasks = [2,2,3,1,8,7,4,5]输出:16解释:最优的方案是将下标为 4, 5, 6, 7 的任务分配给第一颗处理器(最早空闲时间 time = 8),下标为 0, 1, 2, 3 的任务分配给第二颗处理器(最早空闲时间 time = 10)。 第一颗处理器执行完所有任务需要花费的时间 = max(8 + 8, 8 + 7, 8 + 4, 8 + 5) = 16 。第二颗处理器执行完所有任务需要花费的时间 = max(10 + 2, 10 + 2, 10 + 3, 10 + 1) = 13 。因此,可以证 ...