钾肥喵的窝

我在 CODING 部署的 Hexo 博客

0%

题面

https://ac.nowcoder.com/acm/contest/11290/F

从S的生成过程研究递推关系

如果s为空,那么s="0".

如果s不为空,就在ss后面再添加s这个序列。s表示将s序列中的0变为1,1变为0.

很显然,当我们已知 1 ~ 2n 的序列时, 我们可以通过取反获得 (2n + 1) ~ 2n+1 的序列, 也就是说第 2n + k 项实际上可以通过对第 k 项取反得到. 于是我们就得到了递推关系, 那么我们需要做什么呢? 假设我们需要求第 p 项, 而 p = 2n + k , 我们需要做的就是求第 k 项并取反, 对 k 重复上述步骤. 于是递归就写出来了, 下面考虑递归的边界条件, 很显然, 只要考虑第一项和第二项就可以了(不会求就去吟诗啊, 苟...).

阅读全文 »

题面

https://www.luogu.com.cn/problem/P1781

基本思路

记录编号, 比较(三百行的高精度板子在招手)票数。

踩的坑

虽然是水题, 但是可以拿来熟悉语法啊, 所以(自撰一良方,服之)决定用STL来写, 遂翻车。

第一个坑是关于Lambda表达式的, 参数的数据类型填错了, 导致CE, 所以说数据类型要对应。

第二个坑是string的比较运算符, 查阅资料可以知道, string重载的比较运算符是通过strcmp()实现的。 下面放出glibc对strcmp()的实现。

阅读全文 »

题面

https://www.luogu.com.cn/problem/P1177

什么是快速排序

快速排序是运用分治思想的最坏时间复杂度为O(n2), 期望时间复杂度为O(nlgn)的排序算法。

下面简述步骤: > 首先设定一个分界值,通过该分界值将数组分成左右两部分。 > 将大于或等于分界值的数据集中到分界右侧,小于分界值的数据集中到分界左侧。直至左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 > 分别对左右两边的数据进行快速排序。

阅读全文 »

题面

https://www.luogu.com.cn/problem/P1017

进制转换

很简单: 除R取余, 逆序输出(不会吧, 不会吧, 不会还有人这个都记不住吧)

负数进制转换

这个题目坑就坑在这里, 没说清楚负数进制的操作细节

那么我们就只能从样例中获取细节, 模拟一遍(你猜我折腾了几遍)就知道了

观察这组样例:

1
2
3
4
Input:
28800 -16
Output:
28800=19180(base-16)
我们发现基本原理还是 除R取余, 逆序输出, 不过余数为负数的时候需要借位 比如膜了一次-16之后是-1800, 再膜-16就是-8, 商是112, 这个时候我们向商借一个1, 也就是说余数变成了-8 -(-16) = 8, 商变成了113

阅读全文 »

看到P1932时就想写高精度了, 但是因为种种原因(单纯因为懒和废)一直没有写. 因为实践课的附加题需要用到高精度, 于是就开始了漫长的爆肝之路(前前后后肝了接近五天).

主要参考: https://www.luogu.com.cn/blog/user24922/solution-p1932 增加了对负数运算的支持, 并且修复了一个bug.

因为代码比较长, 为了控制篇幅, 正文基本不会贴代码.

大整数的存储结构

很显然, 自带的数据类型并不够用, 所以我们需要自己造一个新类型.

既然支持负数运算, 那么一个标志位自然是必不可少的.

接着就需要存数据了, 显然, 有了标志位, 直接存绝对值会更方便, 所以我们直接开个 long long 数组(用有符号的便于加减法运算)来存就好了.

阅读全文 »

题面

https://ac.nowcoder.com/acm/contest/9692/D

读题

首先要明确后导零(顾名思义, 很显然就是 p 进制下末尾连续0的个数).

题面中有一句话很重要: + 为了简化问题,p 保证为素数. 有了这个保证, 我们要考虑的范围就小了很多.

算法

首先我们转换一下问题, 求后导零的个数实际上就是对 n! 进行因数分解, 然后求其中 p 因子的个数(这个时候你就发现素数多么和蔼可亲了). 参照一下进制转换的过程就可以很容易的得出上述结论.

阅读全文 »

题面

https://ac.nowcoder.com/acm/contest/9692/E

解题

首先研究 k|gcd(i, j) . 很显然, 如果该式成立, 那么 k 必然是 i, j 的公因子, 也就是说 i, j 都是 k 的倍数. 所以我们所求的就是符合要求的数对的个数, 根据数学知识 1 ~ n 中有 a = n / kk 的倍数, 1 ~ m 中有 b = m / kk 的倍数, 符合要求的数对个数就是 a * b .

踩的坑

别问, 问就是不开long long见祖宗.

阅读全文 »

起因是在阮行止大佬的博客看到一篇文章: https://ruanx.net/selenium/ 但是Python和Selenium我都不会啊,而且哈工大和忽忽悠的系统差别较大。

于是发挥优良传统: 抄代码! 在CSDN上找到一篇文章: https://blog.csdn.net/wjl_zyl_1314/article/details/107036245 这篇文章也是代码的主要来源。

开搞之前

自动打卡需要几步? > + 自动登录 > + 自动填写信息 > + 自动提交 > + 信息反馈

阅读全文 »

3.员工管理系统v1,实现一个员工信息管理系统,员工信息包括:姓名、工号、工资. 姓名为不超过30个字符的字符串,工号是长度为5的字符串,假设员工数量不超过100人. 功能包括: > (1)员工信息增加; > (2)员工信息删除; > (3)查询员工信息:通过工号或者姓名 > (4)输出所有员工信息,按照工资排序,按照工号排序.

数据的存储

用三个指针数组分别存储各项信息就好了(现在用结构体就超纲了). 需要注意的是存入数据前要申请内存. 删除数据后要释放内存.

阅读全文 »

发生甚么事了?

噢,原来是左天,一个高中同学问我能不能写个点名器,我说可以.

为什么选Qt

Win32 到处都能跑,但是太麻烦,果断放弃.

MFC 比 Win32 方便一点,但是入门同样麻烦,查了半个小时资料,弃之.

EasyX 容易上手,但是大部分控件需要自己实现,弃之.

Qt 容易上手,工作量小(才不会说是因为方便抄代码和改代码).

点名器的基本原理

我们给每个名字编号,于是点名的过程就变成了一个生成随机数的过程,所以点名器就相当于一个随机数生成器.

阅读全文 »