F. Nice Positions观察:对于一个序列,任意相邻两个数至少有一个是好的,即不存在两个连续的坏点
简单套个容斥就是
好点>=k的方案 <==> 坏点<=n-k的方案
然后从小到大把每个数插入排列,发现如果插入的数在一个坏点两侧,那么坏点数量不变,否则坏点数量+1
主要是一直在考虑,确定前i个点后再确定第i+1个点,从左往右依次确定的线性推法
但是如果从把最后一个数插入排列的任意位置的角度考虑就会简单很多
阅读全文
初始化import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
import numpy as np
fig, ax = plt.subplots()
ax.set_title() # 设置图表标题
plt.savefig() # 以图片形式保存至本地目录
设置坐标轴属性设置坐标位置和标签ax.set_xlabel() # 设置坐标轴名称
ax.set_xticks() # 控制标签位置
ax.set_xlim() # 设置坐标轴范围
ax.set_xticklabels() # 控制标签内容
format='%d ms'
ticks = mtick.FormatStrFormatter(format)
ax.xaxis.set_major_formatter(ticks) # 格式化标签内容
ax.xaxis.set_tick_params() # 设置标签参数
ax.yaxis.tick_right() # 改变坐标轴位置
ax.minorticks_on() # 显示坐标轴小格
ax.set_xscale('log') # 设置对数坐标
阅读全文
准备Message和Packet类定义分别作为应用层和传输层的数据包
其中Packet类的generateChecksum()方法根据报文数据生成校验和,selfcheck()方法根据报文数据和校验和检查数据是否损坏
阅读全文
E. Drinking观察一下不难发现,任意一端区间$g(l,r)=\sum\limits_{i=1}^nx_{(i)}\frac{1}{2^i},x(i)$表示区间内第$i$大的值,由于误差要求$<10^{-6}$,所以估一下只要取区间最大的T=50个数
自然想到单独计算每个数对答案的贡献。设第$i$个数左边比它大的数从右到左为$l_1,l_2,\cdots,l_T$,右边比它大的数从左往右为$r_1,r_2,\cdots,r_T$,那么每个数的贡献为
val_i=w_i\sum\limits_{u=1}^T\sum\limits_{v=1}^T(l_{u-1}-l_u)(r_v-r_{v-1})\frac{1}{2^{u+v-1}}
阅读全文
内容与设计思想在MINIX3中实现Earliest-Deadline-First近似实时调度功能:
提供设置进程执行期限的系统调度chrt (long deadline),用于将调用该系统调用的进程设为实时进程,其执行的期限为:从调用处开始deadline秒。
在内核进程表中需要增加一个条目,用于表示进程的实时属性;修改相关代码,新增一个系统调用chrt,用于设置其进程表中的实时属性。
修改proc.c和proc.h中相关的调度代码,实现最早deadline的用户进程相对于其它用户进程具有更高的优先级,从而被优先调度运行。
在用户程序中,可以在不同位置调用多次chrt系统调用,在未到deadline之前,调用chrt将会改变该程序的deadline。
未调用chrt的程序将以普通的用户进程(非实时进程)在系统中运行。
阅读全文
内容与设计思想实现一个基本的Shell,能够实现以下功能:
1. 带参数的程序运行功能。
2. 重定向功能,将文件作为程序的输入/输出。
3. 管道符号“|”,在程序间传递数据。
4. 后台符号& ,表示此命令将以后台运行的方式执行。
5. 工作路径移动命令cd。
6. 程序运行统计mytop。
7. shell退出命令exit。
8. history n显示最近执行的n条指令
阅读全文
A签到
C简单题
D最短路、树相关 待补
F数学、思维
首先由于$n’$最终取值范围为$[1,n]$,所以枚举$n’$可以得到一个$O(n)$的做法
然后把$[1,n]$分块为$[1,\sqrt m],[\sqrt{m}+1,\min\{n,m\}]$两部分,枚举第一部分n’取值,复杂度$O(\sqrt n)$,对于第二部分,可以把式子写成$m’=n’k$,此时$k$的取值范围为$[1,\sqrt m]$,枚举k,对于每个固定的k,可以找到一个贪心方案使代价最小,所以第二部分的代价也是$O(\sqrt m)$.
阅读全文