题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805072641245184;
废话:今天忙着学习新知识了,没怎么顾得上做题,所以说抽出晚上两个小时做做题,白天学新知识;
不得不说的是,dijkstra+priority_queue+spfa优化真的难学,我现在还停留在思想阶段,但是已经可以理解了基本的思想;
但是,堆还没有学,真的好难理解啊
这道题还是蛮有意思的;
首先,题目是“链表去重”,但又不是完全的链表去重,(小声bb,不会真有孩子手写去重链表吧???好难的)
其实,这道题根据题目模拟就可以了,对,没错,又是模拟,但是
这次加入了新的模拟构成--hash,也就是哈希查找,这里简单介绍一下哈希
哈希,又称散列表,是记录的储存位置和关键字之间建立一个确定的函数关系,使得每一个关键字key都对应一个确定的值,这种对应关系称为散列函数,也叫哈希函数,
同时哈希不仅是一种储存方法,也是一种查找方法,
这种方法最适合求解查找和给定的值相等的记录
在一定程度上,个人认为哈希和数学上的映射有着相似的联系,都存在一一对应关系,遵循相同对应法则,此处请看映射定义:
设A和B是两个非空集合,如果按照某种对应关系
,对于集合A中的任何一个元素a,在集合B中都存在唯一的一个元素b与之对应,那么,这样的对应(包括集合A,B,以及集合A到集合B的对应关系f)叫做集合A到集合B的映射(Mapping),记作
。其中,b称为a在映射f下的象,记作:
; a称为b关于映射f的原象。集合A中所有元素的象的集合记作f(A)。
是吧,这样更好理解了些;
这里在普及一个知识点:for(register int i=st;~i;i=ne[i])
如何理解这个循环?
~在C语言里面是二进制取反的意思,与补码颇有相似指出,按照代码运行结果来看,这个~就是对十进制的数加“-”在减1,
也就是说~i也就可以等价于i!=-1
这种处理方式对于哈希查找是具有辅助作用的;
在来说说本题思路:
我们输入首地址,键值,下一个地址,并且存入专门的数组种,在进行哈希,如果这个数的绝对值有相等的(走过已经标记的),就放入第一个储存数组中,如果没有,就标记这个数组,再存入另一个储存数组,最后按照题目要求输出相应的数组就可以了。
Talk is cheap. Show me the code. 1 #include<bits/stdc++.h> 2 using namespace std; 3 int st,n; 4 int key[100010];//键值 5 int ne[100010];//下一个地址 6 bool vis[100010];//标记数组 7 vector<int>a,b; 8 int main() 9 { 10 scanf(%d %d,&st,&n); 11 for(register int i=0;i<n;i++) 12 { 13 int tag,keys,e; 14 scanf(%d %d %d,&tag,&keys,&e); 15 key[tag]=keys; 16 ne[tag]=e; 17 } 18 for(register int i=st;~i;i=ne[i])//等价于i!
1.数据库的增删查改;
2.怎么测试一张A4纸;
3.linux系统的内存占用率查询;端口占用;以及查看是否有某个进程存在;
4.http和https的端口号查询;
5.关联;
6.python列表;
7.rmp怎么搭建;
8.普通用户去哪里配置环境变量;
9.
package com.life.design.adaper.classadapter; public interface IVoltage5V { public int output5V(); } package com.life.design.adaper.classadapter; public class Voltage220V { public int output220V() { int src = 220; System.out.println(电压= + src + 伏); return src; } } package com.life.design.adaper.classadapter; public class VoltageAdapter extends Voltage220V implements IVoltage5V { @Override public int output5V() { int srcV = output220V(); int dstV = srcV / 44 ; return dstV; } }
简介 线性回归:根据数据,确定两种或两种以上变量间相互依赖的定量关系
评价曲线的拟合效果使用均方误差和R方值进行拟合质量评估
\[M S E=\frac{1}{m} \sum_{i=1}^{m}\left(y_{i}^{\prime}-y_{i}\right)^{2} \]
R方值 \(\left(R^{2}\right)\) :
\[R^{2}=1-\frac{\sum_{i=1}^{m}\left(y_{i}^{\prime}-y_{i}\right)^{2}}{\sum_{i=1}^{m}\left(y_{i}-\overline{y_{i}}\right)^{2}}=1-\frac{M S E}{\text { 方差 }} \]
MSE越接近0越好R方值越接近1越好。
对于离散数据点。
x y 1 7 2 9 3 11 4 13 5 15 进行机器学习线性回归操作
code import pandas as pd data = pd.read_csv('generated_data.csv') data.head() x = data.loc[:,'x'] y = data.loc[:,'y'] print(x,y) from matplotlib import pyplot as plt plt.
课程安排(4.17-6.17) 时间 课程视频 课程教材 (周一-周六)9.00-12.00 11.30-12.30 / LeetCode (周一-周二)2.00-5.30 数据结构-MOOC 《python数据结构与算法分析》 (周一-周二)7.00-11.00 机器学习基石 林老师主页《机器学习实战》《统计学习方法》《西瓜书》 (周三)2.00-6.00 最优化方法 《凸优化》—本地Pdf (周三)7.00-11.00 随机过程 《应用随机过程:概率模型导论》—图书馆 (周四)2.00-6.00 算法导论/数字图像处理 《数字图像处理》—本地Pdf/《算法图解》 (周四)7.00-11.00 3D目标检测项目/深度学习面试总结 / (周五-周六) 课题相关内容 (周日)2.
qsort函数用法简介 前言 在这里先感谢zjh和oyhd两位学长。没有他们两位的悉心指导,我想我肯定不能在短时间学会并熟练使用qsort函数,并在程设期末时用上它。
以下开始正文
先上一个题铺垫一下 大家看完题后应该不难理解,其实就是一个双关键字排序,先排成绩再排姓名的字典序(字典序其实就是根据每个字符的ASCII码值对字符串进行比较
下面直接给例题代码了(这个代码差不多包括qsort排序大部分的内容了)第一遍可以先随便浏览一下,晚点看完下面的再回来看一下
#include<stdio.h> #include<stdlib.h>//qsort在这个函数库里面 #include<string.h> struct in{//结构体变量,存储每个人的成绩和名字 int score;//成绩 char name[15];//姓名 }a[1005]; int cmp(const void *p,const void *q);{//qsort的比较函数,用于确定比较规则 int main(){ int n; scanf(%d,&n); for(int i=1;i<=n;++i){//读入 scanf(%s %d,a[i].name,&a[i].score);//这个是结构体变量的引用,下面会仔细讲 } qsort(a+1,n,sizeof(a[1]),cmp);//直接qsort排序就行了,是不是很方便hh for(int i=1;i<=n;++i){//输出 printf(%s %d\n,a[i].name,a[i].score); } /*主函数里面其实相当简单对吧,读入以后直接排序,排完序输出就可以了*/ } int cmp(const void *p,const void *q){ struct in c=*(struct in*)p; struct in d=*(struct in*)q;//定义结构体c和结构体d来存储p和q中的值,就是套路,记下来用多了就明白了 if(c.score!=d.score){//先比较成绩,再比较姓名字典序 return c.score>d.score?-1:1;// } else return strcmp(c.name,d.name);//否则直接返回strcmp的值就行了,这就是按字典序排序 } 各位看了这道题以后应该大概就明白qsort有多好用了(用冒泡写起来应该不容易),下面我大概介绍这个函数的一些内容(随便看看就好,有些也不重要
qsort函数简介 首先qsort其实是Quicksort也就是快速排序的缩写(qsort函数在C语言中是在<stdlib.h>这个函数库里,要使用时记得#include<stdlib.h>
其实大家在学习排序的过程中,肯定会先学过冒泡排序和选择排序
那为什么还要学qsort函数呢?
下面简单说一下,以冒泡排序为例
Question RocksDB's LOG file comes in handy when troubleshooting Flink with RocksDB. How can I configure RocksDB logging?
Answer Note: This section applies to Flink 1.10 - 1.14
By default, Flink uses the log level HEADER_LEVEL for RocksDB. This essentially disabled RocksDB logging and leave only RocksDB configuration printed in the RocksDB log file. The main reason is that the RocksDB log file is not controllable in size prior to Flink 1.
1. 实验任务1
task1.c
程序功能:在屏幕上 25行,80列 的范围内任意位置打印十次字符串”hi,May~“,每次打印间隔1000ms
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #define N 80 void printText(int line, int col, char text[]); // 函数声明 void printSpaces(int n); // 函数声明 void printBlankLines(int n); // 函数声明 int main() { int line, col, i; char text[N] =hi, May~; srand(time(0)); // 以当前系统时间作为随机种子 for (i = 1; i <= 10; ++i) { line = rand() % 25; col = rand() % 80; printText(line, col, text); Sleep(1000); // 暂停1000ms }return 0; } // 打印n个空格 void printSpaces(int n) { int i; for(i=1; i<=n; ++i) printf( ); } // 打印n行空白行 void printBlankLines(int n) { int i; for(i=1; i<=n; ++i) printf(\n); } // 在第line行第col列打印一段文本 void printText(int line, int col, char text[]) { printBlankLines(line-1); // 打印n-1行空行 printSpaces(col - 1);// 打印n-1列空格 printf(%s, text); } 2.
场外选手再次口胡
这种东西如果是链就很好做,并且有链的部分分。。。那么就照着这个方向想想吧。
考虑计算对于一个序列,全部都被填了数字的方案数。
容易发现枚举最大值有很简单的 \(O(nK)\) 做法:
\[\sum_{x=0}^{\infty}\prod_{i=1}^{n}(\min(x+K,r_i)-\max(x,l_i))-\prod_{i=1}^{n}(\min(x+K-1,r_i)-\max(x,l_i)) \]
两部分差的不多,所以只用考虑一边。
并且容易发现这个是点权的 \(0\) 次和,所以先暂且不考虑 \(1\) 次和,做法可以凭感觉确定是类似的(
容易发现,可以把 \(l_i\) 和 \(r_i\) 分成四类贡献。
然后,我们将所有的 \(l_i,r_i,l_i+K,r_i+K,l_i-K,r_i-K\) 全部拉出来排序,每个 \(x\) 能够对应排序后的一段。然后容易发现,一段对一个节点的贡献是固定的。
也就是说,如果 \(x\) 在离散化后的某个区间上,那么一个节点对其的贡献一定是一个和 \(x\) 有关的一次多项式。
于是我们枚举 \(x\) 在哪一段,问题就变成了先对每一段计算多项式,然后计算 一棵树上所有路径的多项式之积之和。
这种典中典问题当然是用点分治最好。。。但是模数不是 \(998244353\)。
考虑 NTT 的本质是插值。于是我们就插值。可以知道答案多项式一定是 \(O(n)\) 次的,于是代入 \(O(n)\) 跑一遍拉插就行了。
一棵树上所有路径的点权之积之和,这种典中典问题可以 DP \(O(n+\log mod)\) 解决掉。
复杂度 \(O(n^3+n^2\log mod)\)。
期望
Statement G - Colorful Candies 2 (atcoder.jp)
给定 \(n\) 个糖果,第 \(i\) 个糖果颜色为 \(c_i\)
对于每个 \(k=1∼n\),求随机选出 \(k\) 个糖果,\(\binom nk\) 种情况中糖果颜色数的期望。答案模 \(998244353\)。
\(n\le 5\times 10^4\)
Solution 知道这类问题的一般套路都是先利用期望的线性性转化问题求解
但是不会用期望的线性性,于是最开始设了一个 \(dp[i][j][k]\) 表示前 \(i\) 种颜色中选择 \(j\) 个,选出 \(k\) 不同颜色的方案数,然后前缀和优化之后得到一个 \(O(n^3)\) 后发现状态实在减不动了,GG
回到正题,注意到本题中对答案有影响的是不同颜色的数量和每种颜色数量,并不关注每种颜色具体是什么
枚举 \(k\) ,题目要求计算 \(E(\sum x_i)\) ,\(x_i=1/0\) 表示选择 \(k\) 个数,颜色 \(i\) 是/否被选中
有 \(E(\sum x_i)=\sum E(x_i)\) ,考虑求出选择 \(k\) 个数中有 \(i\) 的期望
简单容斥一下,用总方案数-选不中方案数,设颜色 \(i\) 有 \(cnt_i\) 个
\[E(x_i)=\dfrac{\binom nk-\binom {n-cnt_i}k}{\binom nk} \]
暴力计算是 \(O(n^2)\) 的,考虑优化