C++ set 用法小结
写在前面
无意间翻到了17年11月准备NOIP时整理的set用法,现把它放到csdn上来
<set> 小结
set的英文意思是“集合”, 集合都不陌生吧,集合的特点有唯一性,即:每一个元素只有一个,所以set可以用来“去重”操作,set还有默认的排序。
头文件——<set>
定义——set<int>Q
输入(插入)——insert(x)
有序输出:
12345set<int>::iterator it;for(it = Q.begin(); it != Q.end(); it++)cout<<*it<<endl;
删除制定元素——erase(x)
清空——clear()
判空——empty()
大小——size()
二分查找——Q.lower_bound(x)
set 的 lower_bound() upper_bound
内部自带 lower_bound() upper_bound(这俩返回的是迭代器)
lower_bound(key_value) ,返回第一个大于等于key_value的定位器
...
【程序设计思维与实践】 sdu 第四周 csp模拟
题目A - 咕咕东的奇遇
题意
咕咕东是个贪玩的孩子,有一天,他从上古遗迹中得到了一个神奇的圆环。这个圆环由字母表组成首尾相接的环,环上有一个指针,最初指向字母a。咕咕东每次可以顺时针或者逆时针旋转一格。例如,a顺时针旋转到z,逆时针旋转到b。咕咕东手里有一个字符串,但是他太笨了,所以他来请求你的帮助,问最少需要转多少次。
Input
1zeus
Output
118
思路
考虑上衣字符拨到当前字符逆时针还是顺时针即可。
具体的判断可以用,注意取模:
顺时针: 当前字符−-− 上一字符
逆时针:26−-− (当前字符−-− 上一字符)
总结
憨憨的我上来直接24个英文字母。签到题
代码
123456789101112131415161718#include <iostream>#include <cstdio>using namespace std;int main() { string s; cin >> s; int ans = 0; int k = 0; for (int i = 0; ...
【程序设计思维与实践】 Week3 作业 (3/4/数据班)
A - 选数问题
题意
给定nnn个数,从中选取kkk个,另总和为sss,共TTT组数据。其中k≤n≤16k \le n \le 16k≤n≤16,T≤100T \le 100T≤100。
input
123110 3 101 2 3 4 5 6 7 8 9 10
output
14
思路
朴素的dfsdfsdfs即可。虽然数据规模很小,但还是可以剪枝去掉一些情况。
超过kkk个数去掉
总数超过sss去掉
最坏复杂度O(n!)O (n!)O(n!)
总结
签到题
代码
12345678910111213141516171819202122232425262728293031323334353637383940414243#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include & ...
【程序设计思维与实践】 Week2 实验 (3/4/数据班)
A - 化学 (编译器选 GNU G++) Gym - 270437A
题意
假设如上图,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6,然后用一对数字 a,b 表示原子a和原子b间有一个化学键。这样通过5行a,b可以描述一个烷烃基
你的任务是甄别烷烃基的类别。
思路
这个题就很有意思了,我们可以分类判断。我们可以把每一个原子看成点,其中第1个和第6个有明显的特征,即只有第一个最大出度为2,最后一个最大出度为4。同时我们可以对于每一个烷烃基找到出度最大的点。
这时以出度最大的点为根开始dfs找最大深度,只有第2个最大深度为3。
此时只有3,4没有区分了,只需要刨除出度最大的点再找一个出度次大的点即可。次大出度为2即为第三个,为3即为第3个。
总结
本题情况仅为6个,做法很多。比如还可以找最长链。由于为rank,没有仔细考虑,上述思路还有可以提升的地方,将2,3,4选择转化为判断最长链会更简单。
代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454 ...
【程序设计思维与实践】 Week2 作业 (3/4/数据班)
写在前面
在看代码的过程中整理了动态数组的相关内容,由于篇幅较长,且比较重要,单独整理了一篇博客如下:
动态数组初始化
A - MAZE
题意
东东有一张地图,想通过地图找到妹纸。地图显示,0表示可以走,1表示不可以走,左上角是入口,右下角是妹纸,这两个位置保证为0。既然已经知道了地图,那么东东找到妹纸就不难了,请你编一个程序,写出东东找到妹纸的最短路线。输入是一个5 × 5的二维数组,且保证一定有解
思路
从(0,0)位置开始BFS,每次向上下左右四个方向扩展状态。直到最终达到(4,4)为止。
可以map,来记录路径。map中的关系为当前状态又哪一个状态转移而来。
根据BFS的性质,第一个达到(4,4)的值定位最优解。
总结
这是一道简答的BFS题,利用map记录路径即可。
这里注意,对于结构体重载比较运算符只需要重载一个<就够了,至于为什么,因为c++会自动补出其它运算符。PS:只能用于<,其它符号不可以。
代码
1234567891011121314151617181920212223242526272829303132333435363738394041 ...
C++ - new - 动态数组 - 初始化
数组的动态初始化
在代码的时候看到了new初始化的一些问题,查阅了相关文档总结如下。可直接阅读结论部分,文档内内容在下面。
结论:
1234567int *p = new int[10]; // 每个元素都没有初始化int *p = new int[10] (); // 每个元素初始化为0int *p = new int(7); // 元素初始化为8int *p = new int(); // 元素初始化为0int *p = new int; // 元素没有初始化string *p = new string[10]; // 每个元素调用默认构造函数初始化string *p = new string[10](); // 每个元素调用默认构造函数初始化
为什么没有int *p = new int[10](7),因为标准不支持,可见规则2。
动态数组初始化:
动态数组只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。
对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作:
类类型元素的数组, ...
Django Filefield 保存用户上传文件
Django Filefield 保存用户上传文件
网上关于Django Filefield 的文章很少。
今天踩了踩坑,给了一套Filefiled上传保存文件的方法。
跟一般web开发一样,上传的文件保存在请求体的某个字段中,通常为file字段
在views.py中,可以这样获得上传的文件
123# view.pydef post(self, request): avatar = request.FILES.get("file")
这样avatar就存储了上传的文件,保存其实有很简单的方法,django替你封装好了:
12345# view.pydef post(self, request): import datetime user.avatar.save("{}_{}.jpg".format(user.id, datetime.datetime.now().strftime('%Y-%m-%d')), avatar) user.save()
这里顺便对保存的数 ...
MIPS - 反汇编 - 拆炸弹 - bomb
MIPS - 反汇编 - 拆炸弹 - bomb
前言
整理文档发现了之前的实验报告,鉴于从17级开始才开始使用MIPS实验环境,取实验报告精华,整理主要思路如下。该博客叙述风格参考了窦优秀学长的博客。
该博客旨在帮助入门分析,不对整个过程详细介绍。前三个炸弹较为详细。
课程为山东大学计算机专业大二上学期计算机系统原理实验。
作者信息
2018级山东大学计算机LL
GDB
设置、查看、删除断点:
1231. b * 0x233666 2. info b 3. delete 1
查看寄存器、变量中的值
121. x $ra # 与p *$ra 类似 2. p $ra #打印参数
实验
先给出一些常用指令、寄存器和函数的说明:
12341. BEQZ RS, OFF18 IF RS = 0, PC = OFF18 2. (如果寄存器中值为0,PC指针赋值为立即数) 3. BEQ RS, RT, OFF18 IF RS = RT, PC = OFF18± 4. SLTI RD, RS, CONST16 RD = (RS± < CONST16±) ...
Ubuntu LTS 18.04 下 conda tmux zsh等配置
一个新的Ubuntu LTS 18.04 conda tmux zsh等配置
最近阿里云给出免费6个月2H4G服务器活动,领了一个并简单配置了一下。
相较于apt-get更推荐apt,它集合了apt-get,更新,更便捷。
用户
创建新用户
12sudo adduser xxx #创建用户sudo userdel xxx #删除用户
添加管理员权限
首先:
1vi /etc/sudoers
1"root ALL=(ALL) ALL" 在起下面添加 "xxx ALL=(ALL) ALL" (这里的 xxx 是你的用户名),然后保存退出。
修改主机名
首先修改/etc/cloud/cloud.cfg
12sudo vim /etc/cloud/cloud.cfg#找到preserve_hostname: false修改为preserve_hostname: true
12345678#修改主机名sudo vim /etc/hostname#然后改为需要的主机名后存盘退出#映射主机名(可选,因为域名只对应IP,和主机无关)sudo vim ...
Linux下tmux操作指令整理
tmux
123456tmux new -s session_name # 创建名为 session_name 的 tmux sessiontmux attach -t session_name # 重新回到叫做 session_name 的 tmux sessiontmux switch -t session_name # 切换到叫做 session_name 的 tmux sessiontmux list-sessions / tmux ls # 列出现有的所有 sessiontmux detach # 离开当前开启的 sessiontmux kill-server # 关闭所有 session
1234567891011ctrl + b? 列出所有快捷键;按q返回d 脱离当前会话,可暂时返回Shell界面s 选择并切换会话;在同时开启了多个会话时使用D 选择要脱离的会话;在同时开启了多个会话时使用: 进入命令行模式;此时可输入支持的命令,例如 kill-server 关闭所有tmux会话[ 复制模式,光标移动到复制内容位置,空格键开始,方向键选择复制,回车确认,q/Esc退出 ...