算法第三章实践报告
7-1数字三角形
1.实践题目
给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。
2.问题描述
输入格式:
输入有n+1行:
第 1 行是数字三角形的行...[2018/12/3]
[bzoj1116][POI2008][CLO]
题目链接
思路
可以先考虑一棵树
如图,如果是一棵树我们肯定会想这样子做,但是现在根没有入度。所以现在需要再加入一条边使他变成基环树。
假如现在加入一条边\(3-2\),那就会出现一个3-1-2-3的环。然后以这个环上的点为根,就可以找到很多棵满足条件的树
可以发现,这样就解决了根没有入度的问题...[2018/12/3]
洛谷P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)
题意
题目链接
Sol
打出暴力不难发现时间复杂度的瓶颈在于求\(\sum_{i = 1}^n i^k\)
老祖宗告诉我们,这东西是个\(k\)次多项式,插一插就行了
luogu-judger-enable-o2
#include<bit tdc++.h>
using nam...[2018/12/3]
C++强大背后
C++强大背后
在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为——C with cla es,四年后改称为C++。C++是一门通用编程语言,支持多种编程范式,包括过程式、面向对象(object-or...[2018/11/30]
C++的特点
C和C++ C主要是应用在在驱动层,是面向过程的编程语言,对类型的定义不是很严格。C++主要是应用与应用层,是C语言的一个加强版,可以完全兼容C语言,并且还有很多C语言不具备的特性,如,C++是一种面向对象的编程语言,C++的设计目标是:运行效率和开发效率的统一C++更加强调语言的实用性,可以在任...[2018/11/30]
11.29
TheChernoProject
1. Unions in C++
2. C++ Header Files
3. Templates in C++
4. Lambdas in C++
5. Function Pointers in C++
6. Virtual Destructors i...[2018/11/30]
BZOJ1014: [JSOI2008]火星人prefix(splay 二分 hash)
题意
题目链接
Sol
一眼splay + 二分hash,不过区间splay怎么写来着呀
试着写了两个小时发现死活不对
看了一下yyb的代码发现自己根本就不会splay。。。。
luogu-judger-enable-o2
#include<bit tdc++.h>
#de...[2018/11/30]
BZOJ4011: [HNOI2015]落忆枫音(dp 乘法原理)
题意
题目链接
Sol
非常妙的一道题
设\(inder[i]\)表示\(i\)号节点的度数
首先如果是个DAG的话,可以考虑在每个点的入边中选一条边作为树形图上的边,这样\(ans = \prod_{i > 1} inder[i]\)
如果加入一条边的话,算答案的时候可能会把一些环...[2018/11/30]
洛谷P4717 【模板】快速沃尔什变换(FWT)洛谷P4717 【模板】快速沃尔什变换(FWT)
题意
题目链接
Sol
背板子背板子
#include<bit tdc++.h>
using namespace std;
const int MAXN = (1 << 17) + 10, mod = 998244353, inv2 = 499122177;
inlin...[2018/11/30]
BZOJ4589: Hard Nim(FWT 快速幂)
题意
题目链接
Sol
神仙题Orzzzz
题目可以转化为从\(\leqslant M\)的质数中选出\(N\)个\(xor\)和为\(0\)的方案数
这样就好做多了
设\(f(x) = [x \text{是质数}]\)
\(n\)次异或FWT即可
快速幂优化一下,中间不用IFWT,最...[2018/11/30]
VS2015中不同开发环境设置转换(C#->C++等)VS2015中不同开发环境设置转换(C#->C++等)
backup
VS2015 社区版(Community)下载地址: 迅雷下载:ed2k: |file|cn_visual_studio_community_2015_x86_dvd_6847368.iso|4013920256|EB7F6605EDE67509E218E29173AC6574|/...[2018/11/29]
BZOJ4698: Sdoi2008 Sandy的卡片(二分 hash)
题意
题目链接
Sol
用什么后缀数组啊
直接差分之后 二分+hash找最长公共子串就赢了啊。。。
时间复杂度:\(O(nlogn)\)(不过我写的是两个log。。反正也能过)
luogu-judger-enable-o2
#include<bit tdc++.h>
#de...[2018/11/29]
BZOJ4698: Sdoi2008 Sandy的卡片(后缀数组 二分)
题意
题目链接
Sol
不要问我为什么发两篇blog,就是为了骗访问量
后缀数组的也比较好想,先把所有位置差分,然后在height数组中二分就行了
数据好水啊
luogu-judger-enable-o2
#include<bit tdc++.h>
using namesp...[2018/11/29]
01背包、完全背包模板
1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4 const int maxn=510,maxw=510;
5 int w[maxn],v[maxw],a[maxw];
6 int...[2018/11/29]
洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
题意
题目链接
Sol
这题打死我也不会想到后缀数组的,应该会全程想AC自动机之类的吧
但知道这题能用后缀数组做之后应该就不是那么难了
首先把\(S\)和\(S0\)拼到一起跑,求出Height数组
暴力枚举每个后缀是否能成为答案。
具体来说,每次比较当前后缀和\(S_0\)的lcp,如...[2018/11/29]
BZOJ4516: [Sdoi2016]生成魔咒(后缀数组 set RMQ)
题意
题目链接
Sol
毒瘤SDOI 终于有一道我会做的题啦qwq
首先,本质不同的子串的个数 $ = \frac{n(n + 1)}{2} - \sum height[i]$
把原串翻转过来,每次就相当于添加一个后缀
然后直接用set xjb维护一下前驱后继就行了
时间复杂度:\(O(...[2018/11/29]
洛谷P4716 【模板】最小树形图(朱刘算法)
题意
题目链接
Sol
朱刘算法?感觉又是一种神仙贪心算法
大概就是每次贪心的用每个点边权最小的入边更新答案,如果不行的话就缩起来找其他的边
不详细说了,丢链接走人..
#include<bit tdc++.h>
using namespace std;
const int M...[2018/11/29]
洛谷P2792 [JSOI2008]小店购物(最小树形图)
题意
题目链接
Sol
一开始的思路:新建一个虚点向每个点连边,再加上题面中给出的边,边权均为大小*需要购买的数量
然后发现死活都过不去
看了题解才发现题目中有个细节——买了\(A\)就可以买\(B\),但是人家没告诉你必须买够\(A\)的数量才能买\(B\)呀qwqqqqqqq
所以建图...[2018/11/29]
C++拷贝构造函数 的理解
#include <iostream>
using namespace std;
拷贝构造函数的理解
cla Point
{
public:
Point();
Point(int X, int Y);
~Point();
Point(Point ...[2018/11/28]
基于C++11实现线程池的工作原理
目录 基于C++11实现线程池的工作原理. start() 、stop() addTask()、PriorityTaskQueue 1、主程序当前没有任务要执行,线程池中的任务队列为空闲状态. 2、主程序添加小于等于线程池中线程数量的任务. 3、主程序添加任务数量大于当前线程池中线程数量的任务. ...[2018/11/28]
Redis那些事(一) — Redis简介Redis那些事(一) — Redis简介
本人最近在学习Redis的使用和底层原理,有一些收获,所以希望通过写博客的形式来记录自己的学习过程,加深自己的理解,同时也方便以后查阅复习。目前打算先记录一些基本的使用方法和部分底层实现,其他的如果有用到我再贴上来。文章内容是我根据自己的理解和参考网上的资...[2018/11/28]
BZOJ3527: [Zjoi2014]力(FFT)
题意
题目链接
Sol
直接把\(q_i\)除掉
那么\(E_j = \sum_{i = 1}^{j - 1} q_i \frac{1}{(i - j)^2} - \sum_{i = j + 1}^n q_i \frac{1}{(i - j)^2}\)
设\(f_i = q_i, g_i =...[2018/11/28]
c/c++ 多线程 等待一次性事件 异常处理
多线程 等待一次性事件 异常处理
背景:假设某个future在等待另一个线程结束,但是在被future等待的线程里发生了异常(throw一个异常A),这时怎么处理。
结果:假设发生了上面的场景,则在调用future的get方法时,就会得到被future等待的线程抛出的异常A。
3种情况:
1,std...[2018/11/28]
引用折叠和完美转发
阅读本文需要具有的预备知识:
左值和右值的基本概念
模板推导的基本规则
若无特殊说明,本文中的大写字母T泛指任意的数据类型
引用折叠
我们把 引用折叠 拆解为 引用和 折叠 两个短语来解释。
首先,引用的意思众所周知,当我们使用某个对象的别名的时候就好像直接使用了该对象,这也就是引用的...[2018/11/28]
51nod 1135 原根(原根)
题意
题目链接
Sol
可以证明素数的原根不会超过他的\(\frac{1}{4}\)
那么预处理出\(P - 1\)的所有的质因数\(p_1, p_2 \dots p_k\),暴力判断一下,如果$\exists i, a^{\frac{P - 1}{p_i}} \equiv 1 \pmod {...[2018/11/28]
[算法]浅谈求n范围以内的质数(素数)[算法]浅谈求n范围以内的质数(素数)
汗颜,数学符号表达今天才学会呀-_-#
下面是百度百科对质数的定义
质数(prime number)又称素数,有无限个。
质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
求质数的方法自然不少,但主要还是有三大方法,它们运用在不同的领域,根据数据也会变化;
1、...[2018/11/28]
BZOJ3992: [SDOI2015]序列统计(NTT 原根 生成函数)
题意
题目链接
给出大小为\(S\)的集合,从中选出\(N\)个数,满足他们的乘积\(\% M = X\)的方案数
Sol
神仙题Orz
首先不难列出最裸的dp方程,设\(f[i][j]\)表示选了\(i\)个数,他们的乘积为\(j\)的方案数
设\(g[k] = [\exists a_i...[2018/11/28]
BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵快速幂)
题意
题目链接
Sol
不难发现吃人鱼的运动每\(12s\)一个周期
所以暴力建12个矩阵,放在一起快速幂即可
最后余下的部分暴力乘
#include<bit tdc++.h>
using namespace std;
const int MAXN = 52, mod = 10...[2018/11/28]
BZOJ2882: 工艺(后缀数组)
题意
题目链接
Sol
直接把序列复制一遍
后缀数组即可
在前\(N\)个位置中取\(rak\)最小的输出
#include<bit tdc++.h>
using namespace std;
const int MAXN = 1e6 + 10;
inline int read...[2018/11/28]
[luogu1552][派遣][luogu1552][派遣]
题目链接
思路
首先肯定要树形dp,一直没想到怎么用左偏树。如果不断弹出又不断地合并复杂度不就太高了。瞄了眼题解才知道可以直接用大根树。然后记录出当前这棵左偏树的大小(树里面所有点的薪水之和)以及点的个数。然后不断的删点。直到薪水满足条件为止。
代码
#include<iostream>...[2018/11/28]
c/c++ 多线程 多个线程等待同一个线程的一次性事件
多线程 多个线程等待一个线程的一次性事件
背景:从多个线程访问同一个std::future,也就是多个线程都在等待同一个线程的结果,这时怎么处理。
办法:由于std::future只能被调用一次get方法,也就是只能被某一个线程等待(同步)一次,不支持被多个线程等待。所以std::sharted_f...[2018/11/28]
STL中栈stack的用法
头文件: #include <stack>
建立一个栈stack < 类型 > s 例如 stack<int> s
加入一个新的元素s.push( a )
询问栈顶元素s.top()
弹出栈顶元素s.pop()
栈里面有多少个元素s.size()
[2018/11/28]
利用gsoap库封装易用的rest框架
c++缺少web开发的框架,web框架分为异步和同步,异步的业务逻辑控制需要较强功底,同步代码实现起来容易,利于阅读理解
1.gsoap是c++写的webservice库,webservice应用层也是用http进行传输的,gsoap提供了httpget和httppost的插件,...[2018/11/25]
vs2013+opencv3.2配置vs2013+opencv3.2配置
opencv库在3.0以后分为opencv库和opencv_contrib库两部分,其中opencv_contrib库是一个扩展库,如果需要使用SIFT和SURF算法就需要安装这个扩展库,否则只用安装opencv库即可。
对于vs2015、vs2017这样的高版本vs有现成的编译好的o...[2018/11/25]
noip2018游记noip2018游记
day 0
SD的比赛地点在昌邑,考场有两个,一个是昌邑一中,另一个是某职业学校(忘记名字了)
然后我成功抽签抽到了某职业学校的考点,导致每天都得坐大巴去。
当天晚上,一开始不让外出住,后来就莫名的可以了。
试机的时候,发车延迟了,我到了大巴车的地方并且上了车,才发现上到了普及的车,结果就是...[2018/11/25]
BZOJ1270[BJWC2008]雷涛的小猫
雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的)。在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可爱了。
可是有一天,雷涛下课回到寝室,却发现小猫不见了!经过一番寻找,才发现她正趴在阳台上对窗外的柿子树发呆…
在北京大学的校园里,有...[2018/11/25]
字符串全排列
void AllSortCore(char *str,int begin,int end);
void AllSort(char *str)
{
if(str == NULL)
return ;
int n = strlen(str);
AllSortCo...[2018/11/25]
Ceres配置(vs2013+Win10)
主要参考文:Ceres Solver 在Windows下安装配置笔记
eigen、gflags、glog、suitesparse按照上面的链接中的指导配置即可。
配置ceres的时候,按照上面的链接内容配置,在点击configure后会出现在findeigen.c...[2018/11/25]
【原创】自己手写实现Boost序列化简易版
设计思路
在与多个系统进行网络交互时,序列化是不可缺少的技术。编写一个C++语言的序列化实现,是练习运用模板元编程的绝佳案例,理解C++模板是如何"面向编译期编程"的(业内好像没有这个说法)。序列化对象处理基础数据类型和类类型,boost的序列化功能划分得更细致,基本支持了C++语...[2018/11/25]
c/c++ 多线程 等待一次性事件 packaged_task用法
多线程 等待一次性事件 packaged_task用法
背景:不是很明白,不知道为了解决什么业务场景,感觉std::asynck可以优雅的搞定一切,一次等待性事件,为什么还有个packaged_task。
用法:和std::async一样,也能够返回std::future,通过调用get_futur...[2018/11/25]
顺序输出一个整数的各位数字
从高位开始逐位输出一个整数的各位数字:输入一个整数,从高位开始逐位分割并输出它的各位数字。
#include<stdio.h>
int main(void)
{
int i,j,m,n,s,k,a,b=0;
scanf("%d",&m);
k=m;
do
{
m...[2018/11/25]
逻辑运算符号逻辑运算符号
"∧" 表示逻辑与,英语·为”and“;
"∨" 表示逻辑或,英语为”or“;
"┐"表示逻辑非,英语为”not”;
”⊕“表示逻辑异或,英语为”xor“。[2018/11/25]
【数据结构与算法】二叉树——哈夫曼编码
最近有很多的小朋友问我什么是哈夫曼编码,哈夫曼编码是一种可变字长的编码,那什么是可变字长呢?就是一句话里的每一个字符(ASCII码)它的位数(长度)是不一样的。就像我们一句话(AAAACCCCCDDDDBBE)有A,B,C,D,E五种字符,在这里我们可以用01表示A字符,用001表示B字符,用11...[2018/11/25]
c/c++ 多线程 等待一次性事件 std::promise用法
多线程 等待一次性事件 std::promise用法
背景:不是很明白,不知道为了解决什么业务场景,感觉std::async可以优雅的搞定一切的一次等待性事件,为什么还有个std::promise。
用法:和std::async一样,也能够返回std::future,通过调用get_future方法...[2018/11/25]
迷宫自动生成以及基于DFS的自动寻路算法
直接贴代码
#include<ctime>
#include<conio.h>
#include<iostream>
#include<windows.h>
#include<deque>
#include<queue>
...[2018/11/23]
关于C++中字符串输入get与getline的区别关于C++中字符串输入get与getline的区别
最近使用C++中自己老是忘记的一个点,get与getline的区别。
1、get与getline
get和getline所属iostream类,作用是读取一整行,通过换行符确定读取结束,他们都可以读取空格。
2、get与getline区别
getline会在读取结束后舍弃换行符,而...[2018/11/23]
C++ volatile关键字(转)
文章来源:
http: hedengcheng.com/?p=725
https: www.cnblogs.com/god-of-death/p/7852394.html
1、基本概念
volatile:易变的,易失的
C++中使用该关键字修饰的变量,也是体现的“易变”特性。
2、vola...[2018/11/22]
c/c++ 多线程 等待一次性事件 future概念
多线程 等待一次性事件 future概念
背景:有时候,一个线程只等待另一个线程一次,而且需要它等待的线程的返回值。
案例:滴滴叫车时,点完了叫车按钮后,叫车的后台线程就启动了,去通知周围的出租车。这时,用户就可以去干别的了,而且用户只等待叫车的线程一次就够了,也就是有出租车应答了,这个等待就结束了...[2018/11/20]
C++ RAII特性
C++作为一门Native Langueages,在C++98/03时代,资源管理是个大问题。而内存管理又是其中最大的问题。申请的堆内存需要手动分配和释放,为了确保内存正确释放,一般原则是"谁分配谁负责释放",但软件工程的复杂性、程序员的编码水平参差不齐等仍然导致内存泄漏、空悬指针等问题。严重的内...[2018/11/20]
C++学习笔记——C++简介
1.C++发展史
C++语言来源于C语言,在C语言的基础上增加了面向对象设计的要素从而得到了发展。
1979 年,C++ 是由 Bjarne Stroustrup在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C+...[2018/11/20]