begin

动态DP教程

匿名 (未验证) 提交于 2019-12-03 00:06:01
Ŀ¼ 最后一届NOIP TG的day2T3对于动态DP的普及起到了巨大的作用。 然而我到现在还不会 SP1716 GSS3 - Can you answer these queries III 题解位置 这道题的题目大意就是维护动态序列最大子段和。一个比较显然的想法就是用线段树维护 \(lmax,rmax,sum,max\) 即可。但是我们不想放弃DP的优良性质,于是就有了优良的动态DP。 对于这道题目,如果不考虑修改操作,那么DP就是这样的: 令 \(F[i]\) 表示以 \(A[i]\) 为结尾的最大子段和, \(G[i]\) 表示到 \(i\) 为止的答案,那么不难发现 \[ F[i]=A[i]+\max\{F[i-1],0\}\\ G[i]=\max\{G[i-1],F[i]\} \] 下一步就是把转移改写为矩乘的形式。能够改写是因为矩乘基于乘法对加法的分配律。而max同样对加法有分配律。也就是说: \[ a(b+c)=ab+ac\\ a+\max\{b,c\}=\max\{a+b,a+c\} \] 这样,上面的Dp就可以变成这个样子: \[ F[i]=\max\{A[i]+F[i-1],A[i]\}\\ G[i]=\max\{G[i-1],F[i-1]+A[i],A[i]\} \] 那么转移矩阵就应该是一个 \(3\times3\) 的矩阵。 \[ \begin

awk

匿名 (未验证) 提交于 2019-12-02 23:59:01
学习自https://www.cnblogs.com/jiqianqian/p/7944013.html https://www.cnblogs.com/276815076/p/6410179.html 感谢两位博主 一.awk命令简介 1.awk是一种编程语言,用于对文本和数据进行处理 2.具有强大的文本格式化能力 3.awk是逐行进行处理的 二.grep、sed、awk比较 1.grep更适合单纯的查找或匹配文本 2.sed更适合对匹配到的文本进行编辑 3.命令awk更适合文本格式化,对文本进行较复杂的格式处理 三.awk基本语法 awk [options] 'pattern{action}' file eg:vim test.txt ABC 123 Jack DEF 456 Alice GHI 789 Amy 1.在没有options和pattern的情况下 awk '{print}' test.txt//输出全文 awk '{print $2}' test.txt//输出第二列 awk '{print $2$1$3}' test.txt//调整第二列和第一列,并去掉中间的空格 awk '{print $1,$2+1,$3}' test.txt//输出全文,第二列做+1计算 2.pattern包括两种特殊模式,分别是BEGIN和END (1)BEGIN模式

翻转数值

匿名 (未验证) 提交于 2019-12-02 23:57:01
输入1234 输出4321 输入-1234 输出-4321 要求实现判断:输入数为-2^(32-1)~2^(32-1)-1,翻转数-2^(32-1)~2^(32-1)-1,在此范围输出翻转数,否则提示溢出. 实现:法一取余放入队列,取出队首乘倍数实现翻转 #include<iostream> #include<queue> using namespace std; int dealFuntion(long long input); long long mypow(int n); int main(int argc, char* argv[]) { long long a=0; cout<<"输入需要翻转的数值:"<<endl; cin>>a; int b=dealFuntion(a); cout<<"翻转的数值为:"<<endl; cout<<b<<endl; return 0; } int dealFuntion(long long input) { if(input>2147483647||input<-2147483648) { cout<<"输入数溢出"<<endl; return 0; } queue<int> s1; long long i=0; int j=0; int symbol=1; int count=0; long long res; long long

Mayor's posters POJ - 2528 (技巧性离散化+线段树)

匿名 (未验证) 提交于 2019-12-02 23:56:01
大致题意 n(n<=10000) 个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000) 。求出最后还能看见多少张海报。 Input 第一行: 样例个数T 第二行: 贴海报的人n 第三行: 每个人贴海报的范围 接下来n行:每个人贴海报的范围 ˼· 由于li,ri的范围很大,需要离散化,但是容易发现,直接离散化会发生一些问题。比如[1,5],[1,2],[4,5]。上述三个区间离散化之后得到的结果是[1,4],[1,2],[3,4],会发现如果按这个顺序挂海报,最终只能看见2副。但实际上区间[1,2]和[4,5]不能完全覆盖[1,5],其中3这个位置仍可以在最后被看见。所以要先对所有的Li,ri进行一些处理,对所有出现的位置排序后,如果 v[i]-v[i-1]>1那么要在中间插一个数字,避免出现上述问题。具体细节见代码。 然后将操作倒序进行,后面的海报有一个优点,当前海报覆盖的区域如果存在空位,那么它一定不可能被前面的海报覆盖了,所以只要区间[li,ri]内的最小值是0,那么ans++。因为这个空位被当前海报最后一个覆盖。所以只要写一个 维护区间最小值的线段树,支持区间赋值操作即可。 代码 # include <cstdio> # include <algorithm> # include <ctype.h> # include <vector>

AWK

匿名 (未验证) 提交于 2019-12-02 23:55:01
AWK 内置变量表 1、常用操作 [chengmo@localhost ~]$ awk '/^root/{print $0}' /etc/passwd root:x:0:0:root:/root:/bin/bash /^root/ 为选择表达式,$0代表是逐行 2、设置字段分隔符号(FS使用方法) [chengmo@localhost ~]$ awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd root /bin/bash FS为字段分隔符,可以自己设置,默认是空格,因为passwd里面是”:”分隔,所以需要修改默认分隔符。NF是字段总数,$0代表当前行记录,$1-$n是当前行,各个字段对应值。 3、记录条数(NR,FNR使用方法) [chengmo@localhost ~]$ awk 'BEGIN{FS=":"}{print NR,$1,$NF}' /etc/passwd 1 root /bin/bash 2 bin /sbin/nologin 3 daemon /sbin/nologin 4 adm /sbin/nologin 5 lp /sbin/nologin 6 sync /bin/sync 7 shutdown /sbin/shutdown …… NR得到当前记录所在行 4、设置输出字段分隔符(OFS使用方法)

LC 752 Open the Lock (未完成)

匿名 (未验证) 提交于 2019-12-02 23:55:01
由于这个问题,涉及了很多知识,例如数据结构里面的哈希表,c++中的迭代器,因此,需要对于每一个疑惑逐一击破。 问题描述 参考答案 1 class Solution { 2 public : 3 int openLock ( vector <string> & deadends , string target ) { 4 unordered_set <string> dds ( deadends . begin (), deadends . end ()); 5 unordered_set <string> visited ; 6 queue <string> bfs ; 7 string init = "0000" ; 8 if ( dds . find ( init ) != dds . end ()) return - 1 ; 9 visited . insert ( "0000" ); 10 bfs . push ( "0000" ); 11 int res = 0 ; 12 while (! bfs . empty ()) { 13 int sz = bfs . size (); 14 for ( int i = 0 ; i < sz ; i ++) { 15 string t = bfs . front (); bfs . pop (); 16 vector

STL之适配器

匿名 (未验证) 提交于 2019-12-02 23:55:01
摘要:本文主要讲了适配器的一些内容,重要的是了解适配器使用的步骤。 1 #include<iostream> 2 #include<vector> 3 #include <algorithm> 4 #include<functional> 5 #include <string> 6 7 using namespace std; 8 9 //第一步 绑定 数据 bind2nd 10 //继承类 binary_function<参数类型1 ,参数类型2 ,返回值类型> 11 //加const修饰 operator() 12 class MyPrint:public binary_function<int,int,void> { 13 public: 14 void operator()(int v,int start)const{ 15 cout << v+start << endl; 16 } 17 }; 18 void test01() { 19 vector<int>v; 20 for (int i=0;i<10;i++) 21 { 22 v.push_back(i); 23 } 24 cout << "请输入起始值" << endl; 25 int num; 26 cin >> num; 27 for_each(v.begin(), v.end(),bind2nd

生物信息之独孤九剑――awk

匿名 (未验证) 提交于 2019-12-02 23:52:01
编者按: 在金庸武学体系的众多武功之中,独孤九剑并不是最强劲的武功,它与其他武林绝学有很大的不同,可以说是鹤立鸡群。比如乔峰的降龙十八掌,段誉的六脉神剑,张无忌的九阳神功,石破天的罗汉伏魔神功,这些神功都需要强大的内力支撑,而独孤九剑则不同,不需要内力,这点其实可以从华山派气宗与剑宗的分歧就可以看出来。独孤九剑传人风清扬属于剑宗,更注重招式,而不是像剑宗注重练气。独孤九剑分为总诀式,破剑式,破刀式,破枪式,破鞭式,破索式,破箭式,破掌式,破气式,遇到不同的场景使用关不同的招式,因此,独孤九剑更加注重问题的解决,本质上就是就是通过工具来解决问题。只要学会这九剑,就可以处理很多的问题。学习生物信息也是同样的道理,当然练好内功,掌握很好的基础是非常必要的,但是也可以学习一些小工具,解决一些实际问题。那么从这次内容开始,我们就来给大家介绍生物信息之独孤九剑。 awk是Linux系统中最强大的文本处理工具,很多需要编程才能完成的工作,其实通过awk工具就可以轻松解决。awk可以完成cut,grep,sed,join,uniq,wc等工具的一些功能,是非常强大的工具。相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切分,切开的部分再进行各种分析处理。 为什么awk功能这么强大呢

Fork/Join

匿名 (未验证) 提交于 2019-12-02 23:49:02
用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 多线程的目的不仅仅是提高程序运行的性能,但是可以充分利用CPU资源 举例: 实现1 到 100 相加 1 public class Demo extends RecursiveTask<Integer>{ 2 3 private int begin; 4 private int end; 5 6 public Demo(int begin, int end) { 7 this.begin = begin; 8 this.end = end; 9 } 10 11 @Override 12 protected Integer compute() { 13 int sum = 0; 14 //拆分任务 15 if (end - begin <= 2){ 16 for (int i = begin;i<=end;i++){ 17 sum += i; 18 } 19 }else { 20 //拆分 21 Demo d1 = new Demo(begin,(begin+end)/2); 22 Demo d2 = new Demo((begin+end)/2+1,end); 23 24 d1.fork(); 25 d2.fork(); 26 27 Integer a = d1.join()

Delphi - 软件注册的一个例子

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> 利用主板序列号来注册的一个例子,希望对大家有帮助. Unit RegObj; Interface Uses Type Implementation //TRegObj. Constructor TRegObj.Create; Begin End; Function TRegObj.GetTimes: Integer; Const //用于存储运行次数的文件,开发人员可自定义或使用注册表存储运行次数 //起此名字用于迷惑破解者,使用前不要和系统的动态链接库同名 Var Begin //取得Windows系统的目录 @Dir , 255 ); //存储运行次数 End; Procedure TRegObj.SetSerial; Begin //取得主板的序列号 End; //取得密码 Procedure TRegObj.GetKey; Const Var Begin End; Function TRegObj.CheckKey: Boolean; Begin //开发人员根据自己的需要进行修改,在这里是为了简单起见 End; Function TRegObj.Execute: Boolean; Var Begin End; End. 控件写好了,看看控件的使用方法: Procedure TForm1.FormCreate(