2017.6专题

2017.6.4 入门组 NO.7——K上升段

Description 对于自然数1..n的一个排列A[1..N] 可以划分为若干个单调递增序列。每个单调递增序列由连续元素A[st..ed]组成,且满足以下条件: 1<=st,ed<=n; A[i]ed=n 或者 A[ed] > A[ed+1];   例如:排列1 2 4 5 6 3 9 10 7 8 可划分为3个单调递增序列 1 2 3 4 5 6;3 9 10 ;7 8 ; 所以我们

2017.6.4 入门组 NO.6——树

80%:做不出100%,先来个80分水法首先将x,y之间有边的记录两个,存在a数组里,一个是x,y,另一个是y,x然后将这个a数组排序,将a[i,1]按升序排序。Then 就可以求出每一个点与多少个点有边,求出每一个点的"子点"的区间,用l和r数组存再用dfs求出以1作根,每一个点的father是谁预处理Over如果为1,新建一个数组k来存它们的变化;如果为2,就从这个点往回推,如果为

2017.6.4 入门组 NO.5——序列

f[i,j*k]:=f[i,j*k]+f[i-1,j]; 设f[i,j]表示前i个,当那一位数字为j*k的时候的最大好序列个数 代码如下: constmaxn=2000;p=1000000007;varf:array [1..maxn,1..maxn] of longint;i,j,k,n,m:longint;ans:int64;beginreadln(n,m);for

2017.6.4 入门组 NO.3——字符串

其实,这题很水 我们每次pos到一个”bear”,就将其前后多余的相乘,就得出包含这个”bear”的单词数。 为了避免重复计算,我们每次做完一个”bear”,就delete掉 代码如下: var x:ansistring;i,ans:longint;beginans:=0;readln(x);i:=pos('bear',x);while i<>0 dobeginans:=a

2017.6.4 入门组 NO.2——睡眠

其实这题就是将第二个时间-第一个时间,小于0的补全就A了 代码如下: var x,y,k:string;l1,l2,x1,x2,x3,y1,y2,y3:longint;beginreadln(x);readln(y);l1:=pos(':',x);l2:=pos(':',y);k:=copy(x,1,2); val(k,x1);k:=copy(x,l1+1,2); val(k

2017.6.4 入门组 NO.1——k好数

方法①数据1<=n<=1000000,时间复杂度最大O(1000000*6)暴力足够了,于是,便开始码暴力:循环枚举i,将i转为字符串,每一位的判断是否超过k:如果每一位都没超过就+1方法②动态规划找一找每一位于上一位的关系,可以发现。设n=236,k=5,如果最后一位的数x大于k,则上一位数,只能取3+1种,所以(k+1)*f[i-1]设n=234,k=5,如果最后一位x小于或等于k,则