- 博客(44)
- 收藏
- 关注
原创 docker对nginx.conf进行修改后页面无变化或页面报错
由于docker安装镜像是单独的文件系统,即使你挂载了数据卷(数据卷只是同步数据的作用),路径也是相对于docker那个文件系统的
2024-11-02 17:22:51 568
原创 docker安装nginx
首先要获取镜像获取完容器之后就可以直接通过docker run来获取容器了,不过如果想要对nginx的配置进行修改的话需要都需要docker exec进入nginx镜像修改,很不方便,所以可以给nginx挂载个数据卷nginx一般需要挂载的数据卷就是nginx.conf、html目录、conf.d(可需要还可以挂载一个log目录)挂载数据卷的内容一般可以从网上直接复制出来(或者本身就有对应的文件),也可以使用nginx默认的文件。
2024-11-02 01:30:59 451
原创 Vue实现消息提示功能
首先要先定义消息提示的组件,设置自己喜欢的样式,vue中还有可以自定义进场和退场动画的样式(就是那个v-enter-active和v-leave-active)。),这里用的直接传入一个节点(也就是自定义的组件),h函数会有一个VNode的返回值,通过render渲染函数进行渲染,然后将div挂载到body上,最后将这个函数导出。这样就可以实现一个简单的消息传递,但是功能非常的不全(所以我为什么不用Element呢.......),可以当成事件触发后的提示功能。
2024-10-23 23:59:58 608
原创 Web前端JS实现贪吃蛇
学js的时候突然发现贪吃蛇好像就是保存到一个二维数组,然后根据不同的状态渲染页面就行,于是就手写出来了,不过感觉时间复杂度有点高,应该有更好的实现方式。没有写绿色方块不能生成在黑色方块的逻辑(只要循环一下黑色方块,然后判断一下随机数在不在里面,在里面就重新生成一个,直到没有)调整移动速度可以修改speed(单位是毫秒),直接用speed做定时器的循环时间。看起来应该没有BUG吧......
2024-08-13 20:29:32 352
原创 二进制^^
先用__builtin_ctz(x)求出每一个数最小的1的位置在哪,在询问中只要出现了小于这个位置的值,则说明a[i]可以被整除,被整除就在+2^x-1,并且将当前位置的值清空(加上2^x-1就一定不会被2^x整除了)。结果T了,主要是第二个while循环的问题,没有很高效的计算区间和的方法,然后就用到了前缀和,计算每一位上的1的数量,并统计起来,可以快速的计算区间和,最后计算l-r区间中每一位的1的最大值。题意是每次选择一个m,然后操作下标从1到2^m的数,使这些数值减一,问能不能有序。
2023-10-31 12:04:20 132
原创 10月26日【水题日记】
先遍历一次n,取出最大的mex,然后再次遍历,将a[i]存放到新数组中,直到区间中的数包含了0-mex-1,此时可以将mex存放到答案中,并且删除这部分值,遍历过程中考虑下一次mex的取值,下一次mex的取值就是出现断层的地方(min (tot[a[i]]==0,mex))当 a[i-1] > a[i] 时,就需要使 x++直到当前的值大于前一项,此时当前项的值就是a[i] * 2^x。另一种是 a[i-1] * 2 ^ x > a[i],但是 a[i]本身比a[i-1]大,所以可以消掉一部分的x值。
2023-10-27 20:35:37 74
原创 7月1日【水题日记】
重复的有点多,其实就是判断一下对应二进制的值就行,按位或会越来越大,当x的那一位是0的时候,判断的那个数对应位必须是0,其他的随便,不过好像判断一下&就可以通过。看一下他两是不是同一个方向上的,如果是同一个方向上的话就可以减去离a最近的那个点的值,然后把x和y的值加起来就行,要看一下是在a的上面(左)还是a得下面(右)整体不是原数字的子序列,每一个值的位置尽可能的靠右是最好的,然后就往右找就行,如果超出了范围那么剩下的数怎么放都行(都不是原数字的子序列了)给定3n个数,问能不能按位或成x。
2023-07-01 17:11:51 132
原创 染色法判定二分图
对于每一个顶点来说,它能直接联通的点的颜色要与他不同,这样才能保证这两个点在不同的集合里面,所以可以遍历每一点,再遍历它能联通的点,将他们的颜色改成不同的颜色就好了,如果在改色的过程中遇到了已经染上色并且颜色和它本身一样的话,就产生了矛盾。染色法也就是把图中的每一个节点都染上色(给定一个特殊的值),由于二分图只有两个区间,所以只能用两个颜色来表示。可以将图中的所以的点都分成两部分(两个集合中),使得这两部分集合中没有边的连接,边都在集合的外面进行连接。(无论怎么放置,总会存在一条边在集合中)
2023-05-23 22:47:43 74
原创 Tarjan求解LCA
是通过并查集和dfs来实现这个问题的,而且是个离线算法(将所有询问全部读入后再进行处理)这个题读入n-1条边.........求解时要把图看成无向图来解决。
2023-05-23 21:20:13 74
原创 简单数据结构
感觉自己算法方面缺了很多,以后多写点板子之类的主要应用是在存图或者存数上(其实应该是邻接表,正好数据结构学到这了)ne数组和head变量存储的都是,ne数组表示当前节点的,head变量用来表示当前单链表的头结点的位置或者说是单链表的e数组来表示元素的值idx是当前的地址,可以看成数据结构里面的“new一个新节点”对于删除操作,因为idx值不会重复(只会往后加),所以被跳过的点不会再次出现,可以看成已经删除了,但实际上还是在数组里面。数组模拟采用的是前叉法,用-1来表示NULL。
2023-05-23 21:10:26 51
原创 5月16日【水题日记】
对于偶数来说,最后的序列剩不了三个数,于是要再进行判断,根据上面的描述,可以继续想,因为偶数是最后的一个数改变不了,前面的数依然可以按照上述来操作,并且,操作的值会一直往后面放(可能是负数也可能是正数),也就是说,我们需要比较操作的值与最后一个值进行比较,如果操作值大于最后一个值就是no 否则yes。一开始想的是最好的情况是把m等于min (a,b),无论max是什么样的值,总是能把这个max变成min的倍数(在m的增加中,使max=max-m)给出x和y的坐标,你从(0,0)出发,每一次有三个选择。
2023-05-17 00:13:34 92
原创 5月15日【水题日记】
排列有序其实就是 每一个数都满足p[i]==i ,想要把p[i]排到它对应的值上,其实就是abs(p[i]-i),这个是排到正确位置上所用的最小距离,那就求所有的点的最小公倍数就行了,这样就能满足排序和最大的k了。先统计xi的情况,这部分人是一定得上去的,再去考虑-1和-2的情况,可以想象,在不同的位置,能放下的-1,-2的人数是不一样的,比如xi先放在了第一个位置上,那么-1就都放不了,只能放-2。大概是给定一个n,让你构造一个序列,使得序列中的每一个数都能被下标整除,并且总和是n的倍数。
2023-05-15 15:34:49 67
原创 5月2日【水题日记】
思路:如果一个数与下一个数是递减关系,那么就得使第一个数变成0,当第一个数变成0之后,它前面数一定也会变成递减的关系(给定的数都大于0),那么就把之前的数都加入到集合里面就好了,但是很明显,这个写法会超时。根据上一个思路,没必要一个一个的找,只要找到最后面的那个不合法的数就好了,因为在一个序列中可能会出现多个相同的数,所以要取到所有不合法的里面的数的最后的那个位置。经典贪心题,a[i]>a[i+1]的意思是:如果a[i]大于a[i+1]的话,在操作a[i]的时候就能随便把a[i+1]也给操作了。
2023-05-02 19:47:06 40
原创 5月1日【水题日记】
一开始是觉得,每一个数都得不相等,那么至少得有n个数,后来发现数可以相等,只是他们的gcd不能相等,那么,如果想要互不相等,可以去找一个能被下标整除的数,那么他们的gcd 就是它的下标值,结果超时了........给定一个n,l,r,构造出n个数使得每个数都是大于等于l,小于等于r,并且这些数的gcd (a[i],i)的值互不相等。L / i * i 的结果一定是一个小于或等于L的值,并且这个数一定能被 i 整除,但是不一定符合这个范围(>=L)在这两种情况下取min。
2023-05-01 22:05:14 51
原创 4月30日【水题日记】
对于每一个合法的值(i>a[i]),就保存它的下标,再遇到合法的序列时,就在保存的值中找一个大于当前a[i]的值,并且找到这个值的前面几个数也一定是合法的,因为i是越来越大的,所以这样做一定合法,2.当序列的个数为偶数的时候,最末尾的数字是无法处理的,也就是说通过之前的操作 n-1和n的单调性是确定的,无法再改变了。n的值是没经过处理的,n-1的值其实是前面的数值变化。可以先通过减/加,使i的值变成0,再通过加/减,使i+1也变成0,这个时候i和i+1的值都传递到了i+2的身上。
2023-05-01 10:24:48 80
原创 A. A-characteristic
大概是给定一个n和一个k,让你构造出一个只有1和-1的序列,最终使得序列中相等的数字的个数的总和等于k。接下来,可以先求出来需要多少个正数以及负数,这里我直接循环求了一遍,要保证正数和负数的总数等于n。可以求出来对应的n能获得的最大结果是多少,数据范围不大,可以直接打个表。题不算难,但还是卡主我了,感觉自己在一些细节上还是不太行。规律是1 3 6 10 15 ......今天就做一道题吧,给自己也放个假。(幸好昨晚没打cf)
2023-04-28 17:09:40 103
原创 4月25日【水题日记】
最小的LCM(a,b) a是一定会被b整除的(如果a>b)这样的话,他们的最小LCM就是a的值,那么就去从小到大去遍历a,如果某一个a能整除n那么此时a就一定是最小值。大概是给定三个整数,第一个为需要到达的银币的值,第二个是1枚金币转成银币的值,第三个是银币转成金币的值,每一次操作能给一枚金币,问最小的操作数是多少。如果a>b的话,那么金币和银币是可以互相倒腾的,也就是说,无论给定的n有多大,至多只需要1次就可以完成,大概是给定一个n,让你求a+b=n ,求LCM(a,b)的最小值,LCM(最小公倍数)
2023-04-25 22:07:02 50
原创 4月24日【水题日记】
没思路,但绝对是找规律题,观察样式发现结果是 (n+1)^2+1,随便说一下cout输出的值超过某一位时会转成科学计数法表示,被坑了一下......写完c就想上厕所,回来之后感觉挺难的(想摆),就放弃了,睡觉之前瞄了一眼排名,发现过了4000+,看了一眼样例发现规律是。大概是给定一个序列,删除一些元素,使得相邻的值相乘最大,然后从这些乘值中取一个最大值,问最大值是多少。偶数是先输出n ,再输出一个小于n的最大奇数,再输出一个小于n的最小偶数,如此循环。大概是给定一个序列,找一个小于t的最大值。
2023-04-25 01:00:57 60
原创 4月18日【水题日记】
一开始想的是,使得序列中的每一个值都是最小值的倍数就行,写完之后发现不对劲,仔细想想了,应该是每一个值都得是最小值的幂次,这样就能保证数组中的所有值都能被除尽,写完之后发现可能会超过n次的限制,最后发现并不需要是序列元素的最小值,只要保证是二的幂次就可以了。大概是说给定一个序列,经过至多n次操作之后(任选一个数组中的值,可以将其值加上一个小于改值的数),任选出两个值中的最大值都能被任选两个值的最小值给除尽。大概是给定n个序列,经过m次操作(使当前的值x变为x/2)后,使得序列之和为偶数,求最小的操作数。
2023-04-18 21:13:00 48
原创 4月17日【水题日记】
大概是说这个人的键盘有问题,会在偶数次的时候打出两个相同的字符,给你n个字符,问你这个人电脑能打出来吗。规律是除了下标为1 4 7 10 ......的时候打出的都应该是两个相同的字符。大概是给了2n-2个前缀和后缀字符串,问原本的字符串是不是回文的,一开始想用map做,后来发现总会存在n-1长度的前缀和后缀字符串,那就判断一下这两个字符串是不是相等就好了。其实就是如果(i+1)能被(i)整除就让(i+1)的值+1,然后值为1的点要特判一下。大概是给了n个数,下标(i+1)不能被下标(i)整除。
2023-04-17 21:39:09 39
原创 4月13日【水题日记】
大概是说dasha要买猪,性别不同的猪不能关一个笼子里面,性别的判断是通过输入2的时候来检查前面所有的猪(然而我仍然不知道猪的性别),在没有检查的时候,性别都是不能确定的,都需要关在不同的笼子里面,问至少需要几只笼子。没有检查前,每读入一个1就需要一个笼子,检查后,至多需要n/2+1(n为之前猪的总数),没有检查性别的猪同样需要笼子,已经使用的笼子不能被扔掉。大概是说,给定一个只有1和-1的序列,可以随意进行排序,然后输出最大的前缀和和最小的前缀和,输出不能出现负数。有点蒙,纯纯的阅读理解题。
2023-04-13 21:24:01 47
原创 二维前缀和
前缀和保存的是从(1,1)点开始计算的前缀和,如果想要从其他点开始计算前缀和的话,可以利用差分的操作。s数组是前缀和数组,a数组保存(i,j)点的值,并且s数组保存的是。(x1,y1)是起点位置 (x2,y2)是终点位置。贴个暴力前缀和的做法(80分)剩下的两个点会超时......
2023-03-26 15:59:10 96
原创 P8873 [传智杯 #5 初赛] E-梅莉的市场经济学
即:第一段的最大最小值为0(1-1),第二段的最大最小值为1/-1(2-1),第三段的最大最小值为2/-2 (3-1)(如果前i段的总长度是大于k的话,那么k就在这一段区间中,反之,总长度小于k的话,那么k就一定是在外面的区间中的)发现每一段的长度为4*i-1(也可以是4*i-3 第一个是从i=0算 第二个是从i=1算)并且我们可以使用二分来降低时间复杂度 (我这二分写的有点问题,可以自己重新写)第二段 2-6 长度为 5 (下标从2到6)第一段 1-1 长度为 1 (下标从1到1)
2023-03-09 22:19:29 98
原创 入门数论()
欧拉筛#include <iostream>using namespace std;int a[10050] = { 1,1 }, b[10000];int main(){ int k = 0; for (int i = 2; i <=10000; i++) { if (!a[i]) b[++k] = i;//其中,用b数组来存储素数,a数组用来遍历1到10000 for (int j = 1; j <= k; j++) { if (i * b[
2022-11-25 09:09:54 66
原创 高精度算法
高精度算法(加法)//在a和b都不是负数的情况下(有负数那不是高精度减法了吗)#include <iostream>#include <string>#include <algorithm>using namespace std; string s1, s2; int a[100], b[100], c[100];int main(){ cin >> s1 >> s2; a[0] = s1.size(); b[0] =
2022-11-24 09:23:16 56
原创 ()01背包
01的含义是针对二进制而言的 0代表不取,1代表取,01背包的特点是每个物品能且只能取一次,也就是每个物品只有一个,只有拿或不拿两种操作状态转移方程f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]);含义:在前i个物品且容量为j时,第i个物品取或者不取所能得到的最大价值,其中v[i]代表第i个物品的价值,w[i]代表第i个物品的价值,可以发现对于第i个物品的取或不取所能得到的最大价值其实是与i-1有关的。f[i-1][j]表示不取第i个物品,那么此时的总价值
2022-11-19 12:10:41 134
原创 杭电OJ 2045 c++已通过
题目:通过代码:#include <iostream>using namespace std;int main(){ int flag=1; long long a[100] = { 0 }; a[1] = 3; a[2] = 6; a[3] = 6; a[4] = 18; a[5] = 30; for (int i = 6; i <= 60; i++) { a[i] = a[i - 1] * 2 + 6 * flag; flag *= -1; }
2022-11-02 16:44:46 239
原创 scanf 没有(不加)取地址符 & 的情况
for(int i=1;i<=n;i++) scanf("%d",a+i);之前看到过这种不加取地址符的scanf刚开始很疑惑,觉得有问题,但我学了指针之后就恍然大悟了。首先这个a不是变量,而是一个数组,a代表着这个数组的首地址即&a[0]。其次a+i代表的就是数组中下一个元素的地址即&a[0+i]。因为本身已经就是地址了,所以就不用取地址
2022-10-06 12:15:50 1637 1
原创 杭电oj2041 c语言 已通过
#include <stdio.h>int main (){int n;scanf ("%d",&n);while (n--){ int a[1000]={1,1,2,3},i,j,m,amount=0; scanf ("%d",&m); if (m<=3) printf ("%d\n",m-1); else {for (i=4;i<m;i++) { a[i]=a[i-1]+a[i-2];
2022-09-27 23:16:31 356
原创 杭电oj2099 c语言 已通过
#include <stdio.h>int main (){int a,b;while (scanf ("%d%d",&a,&b)!=EOF){ if (a==0&&b==0) break; a=a*100; int i,j,f=0; for (i=0;i<100;i++) { if ((a+i)%b==0) { if (i<10) { if (f==0)
2022-09-27 10:49:11 312
原创 杭电oj2098 c语言 已通过
#include <stdio.h>#include <math.h>int main (){ int n; while (scanf ("%d",&n)!=EOF) { if (n==0) break; int i,j,f=0,m=0,o=0,p=0; for (i=2;i<=n/2;i++) {for (j=2;j<i/2;j++) if (i%j==0) {f=1
2022-09-27 10:45:15 269
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人