11.8 33oj 模拟赛总结(时间安排 + 题解(数学 + 二分 + 括号匹配DP + 性质DP))

文章目录

  • 考试时间及策略
  • 考试结果
  • 赛后总结
  • 题解
    • Balance Addicts
    • Boboniu and String
    • Bracket Insertion
    • Conveyor

考试时间及策略

7:40 - 8:00       开题。T1 应该是个dp, 但是好像有点恶心。T2是个神秘构造。T3是个求随机括号匹配的概率,一眼应该是个 n 3 n^3 n3 的dp。T4有点离谱,不知道啥东西。
8:00 - 9:20       开始想T1, 发现部分分给的很足。 n 4 n^4 n4 的dp比较一眼,想了一会儿发现 可以优化到 n 3 n^3 n3。然后还有一个特殊性质 a i = 0 a_i = 0 ai=0 的分。这样加起来就有 84 p t s 84pts 84pts了。之后开始想怎样优化。想到了如果没有 0 0 0,那么状态可以优化到 O ( n ) O(n) O(n),转移是 O ( n 2 ) O(n^2) O(n2)。但是转移还是没办法通过,就放弃了接着思考这个思路。(实际上可以接着优化转移,优化过程并不是很难)。又想了 30 m i n 30min 30min,感觉转移真的没办法优化到 O ( n ) O(n) O(n),并且时间不是很够。就直接开写了。写完过了部分分的大样例。
9:25 - 10:00       想T2,发现了一些T2的性质,也成功把问题转化成了图上找一点到其它点距离的最大值最小。但是接着就不会了。只能去拿 ∣ s ∣ 2 n |s|^2n s2n 和 特殊性质的 45 45 45 分了。
10:00 - 11:20       想 T3,想到了一些自认为重要的性质,并且想到了一个看似很对的 O ( N 3 ) O(N^3) O(N3) 的dp。开写!!!写完之后发现过不去样例。调着调着发现刚才想的好像不对。深入思考感觉给状态换一个定义就好了。然后改了改,发现过掉了第二个样例,但是第三个样例过不去了。一直在想哪里错了,但是想不出来。后来发现时间只剩了20min,但是我T4还没开!!!赶紧把T3的几个我会写的特殊性质分写了,含泪拿了 20 p t s 20pts 20pts。去看T4了。
11:20 - 11:40       5min理解完题意,发现35pts是可以拿的,火速开写。写完没过样例!!!慌了,静态查错。终于在时间还剩 1min 的时候过样例了。赶紧交了。

考试结果

期望得分:84 + 45 + 20 + 35 = 184
实际得分:84 + 45 + 20 + 0 = 149
暴力哥都没当成功

赛后总结

T1:应该是有能力场A的,但是没有深入往下想。
T2: 差了一步,正解就是接着往下做了个二分。但是我不是很会线性规划,没做出来也正常。
T3:假完了,白白浪费一个多小时。
T4:漏了一句话导致没拿到35pts,亏麻了。但主要还是因为没有充分的时间去写。下次应该先尽快把暴力写完再去磕正解。

这一场是搬的CF的题,第一题2300,后三题都是2600+,有点恐怖

题解

Balance Addicts

题面

简要题意:
       给定一个长度为 n n n 的序列 a a a,对于每一种将 a a a 划分成若干个子串的方式,我们设当前划分有 k k k 个子串,分别描述为 ( l 1 , r 1 ) , ( l 2 , r 2 ) , . . . ( l k , r k ) (l_1, r_1),(l_2, r_2),...(l_k, r_k) (l1,r1),(l2,r2),...(lk,rk),定义长度为 k k k 的数组 s s s 满足 s i = ∑ j = l i r i a j s_i = \sum_{j = l_i}^{r_i}a_j si=j=liriaj。如果 s s s 是一个回文数组,那么称这一种划分方式是好的。求 a a a 有多少种好的划分。

分析:
       下面提供两种解法。

       S o l 1 Sol_1 Sol1

       因为要求最后数组是回文的,所以我们可以想到一个 O ( n 4 ) O(n^4) O(n4) 的dp:设 f i , j f_{i, j} fi,j 表示序列的前 i i i 个 与后 j j j 个进行分段,形成 对称 的两部分的划分方案数。那么我们枚举左右两边的段的断点 k k k l l l。使得 ∑ p = k i a p = ∑ q = n − j + 1 n − l + 1 a q \sum_{p = k}^{i}a_p = \sum_{q = n - j + 1}^{n - l + 1}a_q p=kiap=q=nj+1nl+1aq。那么 f i , j ← f k − 1 , l − 1 f_{i, j} \leftarrow f_{k - 1, l - 1} fi,jfk1,l1

       仔细思考,我们会发现有一个要求是 [ k , i ] [k, i] [k,i] [ n − j + 1 , n − l + 1 ] [n - j + 1, n - l + 1] [nj+1,nl+1] 的区间和相等。我们枚举 k k k 的时候显然没必要再把所有的 l ≤ j l \leq j lj 枚举一遍。我们可以开一个 来存储信息优化复杂度。具体来说,我们设 c n t i , j cnt_{i, j} cnti,j 表示所有 f i , k f_{i, k} fi,k 的和, 其中需要满足 区间 [ n − k + 1 , n ] [n - k + 1, n] [nk+1,n] 的和为 j j j。然后我们枚举 k k k,转移时直接调用桶里的值就好了。因为 j j j 可能很大,但是后缀和的取值只有 n n n 种,离散化一下就好了。有一些细节:比如需要倒序枚举 j j j
       对于 a i = 0 a_i = 0 ai=0,显然答案是 2 n − 1 2^{n - 1} 2n1。这个可以理解为我们可以在 n − 1 n - 1 n1 个空位里面插板,可以不插,那么方案就是 2 n − 1 2^{n - 1} 2n1

#include<bits/stdc++.h>// 84pts
using namespace std;
const int N = 2e5 + 10;
const int M = 5e2 + 100;
typedef long long LL;
const LL mod = 998244353;
int n, tot, rk[N];
LL dp[M][M], a[N], cnt[M][M], sum[N], b[N];
LL S[N];
int Find(LL x){int c = lower_bound(b + 1, b + tot + 1, x) - (b);if(c > tot || (b[c] != x)) return -1;return c;
}
void solve1(){for(int i = 1; i <= n; i++){sum[i] = sum[i - 1] + a[i];}S[n + 1] = 0;b[++tot] = S[n + 1];for(int i = n; i >= 1; i--){S[i] = S[i + 1] + a[i];b[++tot] = S[i];}sort(b + 1, b + tot + 1);tot = unique(b + 1, b + tot + 1) - (b + 1);for(int i = n; i >= 1; i--){rk[i] = lower_bound(b + 1, b + tot + 1, S[i]) - (b);}dp[0][n + 1] = 1LL;cnt[0][1] = 1LL;for(int j = n; j >= 1; j--){// 倒序做 for(int i = j - 1; i >= 1; i--){for(int k = i - 1; k >= 0; k--){int p = Find(S[j] - sum[i] + sum[k]);if(p != -1) dp[i][j] = (dp[i][j] + cnt[k][p]) % mod;}cnt[i][rk[j]] = (cnt[i][rk[j]] + dp[i][j]) % mod;}}LL res = 0;for(int i = 1; i < n; i++){res = (res + dp[i][i + 1]) % mod;}for(int i = 1; i <= n; i++){for(int j = i; j <= n; j++){res = (res + dp[i - 1][j + 1]) % mod;}}printf("%lld\n", res % mod);
}
LL Pow(LL x, LL y){LL res = 1, k = x % mod;while(y){if(y & 1) res = (res * k) % mod;y >>= 1;k = (k * k) % mod;}return res % mod;
}
void solve2(){//插板法 printf("%lld\n", Pow(2LL, 1LL * n - 1) % mod);
}
void solve3(){}
int main(){scanf("%d", &n);bool f = 1;for(int i = 1; i <= n; i++){scanf("%lld", &a[i]);if(a[i]) f = 0;} if(n <= 500) solve1();// 72ptselse if(f) solve2();// 12ptselse solve3();// 不会 return 0;
}

       接着我们来接着优化。不难发现,如果序列里面没有 0 0 0,那么 f i , j f_{i, j} fi,j 的每一个 i i i 都唯一对应一个 j j j,所以可以把 j j j 哪一维省去。但是如果序列里面有 0 0 0 呢?我们只处理非 0 0 0 的位置, 考虑用 0 0 0 的数量去改变转移。
       假设 b b b 序列是 a a a 序列去除序列里面的 0 0 0 后剩下元素的 位置 序列。设 f i f_{i} fi 表示 b i b_i bi 它对应后缀的 d p dp dp 值。那么考虑朴素转移:假设我们知道 f i f_i fi,向后枚举一个 j j j,转移给 f j f_j fj。设 b i b_i bi 对应的是 b k b_k bk。那么转移就是 f i ∗ ∑ l = 1 m i n ( b i + 1 − b i , b k − b k − 1 ) C b i + 1 − b i l × C b k − b k − 1 l → f j f_{i} * \sum_{l = 1}^{min(b_{i + 1} - b_{i}, b_{k} - b_{k - 1})} C_{b_{i + 1} - b_{i}}^{l} \times C_{b_{k} - b_{k - 1}}^{l} \to f_j fil=1min(bi+1bi,bkbk1)Cbi+1bil×Cbkbk1lfj。这个意思是我们可以在前面的 0 0 0 里面随便插板子,只要保证 b i + 1 b_{i + 1} bi+1 b i b_{i} bi 之间插的板子数量和 b k − 1 b_{k - 1} bk1 b k b_{k} bk 相等就行,但是不能不插。这样转移是 O ( n ) O(n) O(n) 的。我们接着考虑实际上对每一个 j > i j > i j>i f i f_i fi 的贡献都是一样的,我们可以维护一个变量 A d d Add Add,表示前面对当前及后面 f f f 数组的贡献之和。然后每次用 A d d Add Add 更新 f i f_{i} fi,并把 f i f_{i} fi 贡献到 A d d Add Add 里面就好了。时间复杂度 O ( n ) O(n) O(n)

       放一个 klz 的

#include<bits/stdc++.h>
using namespace std; typedef long long LL ;
const int N = 2e5+10 ;
const LL mod = 998244353 ;int n , a[N] , pos[N] , len ;
LL S[N] , ans ; 
LL ksm( LL a , LL b)
{LL res = 1 , t = a % mod ;while( b ) {if( b&1 ) res = res * t % mod ;b = b >> 1 ;t = t * t % mod ;}return res ;
}namespace part2
{int ret[N] ; LL f[N] , fac[N] , inv[N] ;void pre_work(){fac[0] = 1 ;for(int i = 1 ; i <= n ; i ++ ) fac[i] = fac[i-1] * i % mod ;inv[n] = ksm( fac[n] , mod-2 ) ;for(int i = n-1 ; i >= 1 ; i -- ) inv[i] = inv[i+1] * (i+1) % mod ;inv[0] = 1 ;}inline LL C ( int n , int m ) {return fac[n] * inv[m] % mod * inv[n-m] % mod ;}void solve(){pre_work() ;for(int i = 1 ; i <= len ; i ++ ) {S[i] = S[i-1] + a[pos[i]] ;}for(int i = 0 , j = len+1 ; i < j ; i ++ ) {while( i < j && S[i]>S[len]-S[j-1] ) j -- ;if( i < j && S[i] == S[len]-S[j-1] ) {ret[i] = j ;}}f[0] = 1 ;  pos[0] = 1 , pos[len+1] = n ;LL ADD = 0 ;for(int i = 0 ; i <= len ; i ++ ) {if( !ret[i] ) continue ;f[i] = ( f[i] + ADD ) % mod ;int dl = pos[i+1]-pos[i] , dr = pos[ret[i]]-pos[ret[i]-1] ; LL c = 0 ;for(int k = 1 ; k <= min(dl,dr) ; k ++ ) {c = ( c + C(dl,k)*C(dr,k)%mod ) % mod ;}ADD = ( ADD + f[i]*c%mod + (!i) ) % mod ;if( i+1 != ret[i] ) {ans = ( ans + f[i]*c % mod ) % mod ;}else {ans = ( ans + f[i]*(ksm(2,dl)-1)%mod + mod ) % mod ;}if( !i ) ans ++ ; // 补上整体选的 }printf("%lld\n" , ans ) ;}
}int main() 
{scanf("%d" , &n );for(int i = 1 ; i <= n ; i ++ ) {scanf("%d" , &a[i] ) ;if( a[i] ) pos[++len] = i ;}part2::solve() ;return 0 ; 
}

       S o l 2 Sol_2 Sol2
       既然要求最后是回文数组,我们需要从两边一刀刀往内切分。我们考虑把一种划分方式 双射 成两个长度分别为 k k k 的序列 p p p q q q。满足:

       1 ≤ p 1 < p 2 < . . . < p k < q k < q k − 1 < q k − 2 < . . . < q 1 ≤ n 1 \leq p_1 < p_2 < ... < p_k < q_k < q_{k - 1} < q_{k - 2} < ... < q_{1} \leq n 1p1<p2<...<pk<qk<qk1<qk2<...<q1n。我们要求 p r e p i = s u f q i pre_{p_i} = suf_{q_i} prepi=sufqi。其中 p r e pre pre s u f suf suf 分别表示原序列的 前缀和 以及 后缀和

       首先对于任意一种序列都可以映射一种划分方式。其次,对于任意一种划分方式,如果是奇回文,那我们可以从两边一次依次把 段的端点 拿出来构成序列。如果是偶回文,那么我们让中间段的右端点为 p k p_k pk,右端点加一的位置为 q k q_k qk 就好了。

       知道了双射的性质,那么现在我们只需要求这样的 序列数量 就好了。因为序列里面的元素都是正数,所以从左往右前缀和不降。从右往左后缀和不降,所以我们可以把序列按照前缀和的值划分成一段一段的,同时也可以把序列按照后缀和划分成一段一段的。设前缀和为 s u m sum sum 的段长度为 l 1 l_1 l1,后缀和为 s u m sum sum 的段的长度为 l 2 l_2 l2。如果这两段不想交,那么在和为 s u m sum sum 的方案是 ∑ i = 0 m i n ( l 1 , l 2 ) C l 1 i × C l 2 , i \sum_{i = 0}^{min(l1, l2)}C_{l1}^{i} \times C_{l2, i} i=0min(l1,l2)Cl1i×Cl2,i。否则,如果相交,我们能发现这两段会公共覆盖不是端点的中间段,这样答案是 2 r − l 2^{r - l} 2rl

CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
typedef long long LL;
const LL mod = 998244353;
int n, T;
LL a[N], pre[N], suf[N], fac[N], inv[N];
LL C(int n, int m){return fac[n] * inv[m] % mod * inv[n - m] % mod;}
LL Pow(LL x, LL y){LL res = 1, k = x % mod;while(y){if(y & 1) res = res * k % mod;y >>= 1;k = k * k % mod;}return res;
}
void solve(){scanf("%d", &n);pre[0] = suf[n + 1] = 0;for(int i = 1; i <= n; i++){scanf("%lld", &a[i]);pre[i] = pre[i - 1] + a[i];}for(int i = n; i >= 1; i--){suf[i] = suf[i + 1] + a[i];}LL res = 1;int l = 1, r = n;while(l < r){if(pre[l] < suf[r]){l++; continue;}if(suf[r] < pre[l]){r--; continue;}int rt = l, lt = r;while(rt < n && pre[rt + 1] == pre[l]) rt++;while(lt && suf[lt - 1] == suf[r]) lt--;if(rt == r - 1 && lt == l + 1){res = res * Pow(2LL, 1LL * r - l) % mod;break;}if(rt == n || lt == 1){res = res * Pow(2LL, 1LL * n - 1) % mod;break;}else{LL o = 0;for(int k = 0; k <= min(rt - l + 1, r - lt + 1); k++){o = (o + C(rt - l + 1, k) * C(r - lt + 1, k) % mod) % mod;}res = res * o % mod;}l = rt + 1; r = lt - 1;}printf("%lld\n", res);
}
int main(){fac[0] = 1LL;for(int i = 1; i < N; i++) fac[i] = fac[i - 1] * (1LL * i) % mod;inv[N - 1] = Pow(fac[N - 1], mod - 2LL) % mod;for(int i = N - 2; i >= 0; i--) inv[i] = inv[i + 1] * (1LL * i + 1) % mod;scanf("%d", &T);while(T--) solve();return 0;
}

Boboniu and String

题面

简要题意:
有点长,自己看吧

分析:

       我们考虑给的条件是什么意思。
       两个字符串“相似”的定义:两个字符串 N N N B B B 的数量分别相等。
       操作:一次删除或者增加 一个 N N N 或者一个 B B B。或者同时增加或删除一个 N N N,一个 B B B
       要求我们求出一个串 T T T,使得 T T T 变成与给定的所以 S i S_i Si 相似需要的最大操作数最小。

       发现了相似只与 数量 有关,与 顺序 无关,那么这道题就好做多了。我们把 N N N 的数量看做 横坐标,把 B B B 的数量看做 纵坐标,那么问题就转化成了:在平面上有若干个点。你需要求出一个点,满足它到所有给定点的移动步数最大的最小。其中移动方式有 6 6 6 种。
在这里插入图片描述
       有 最大的最小,我们肯定是要二分的。设二分的答案是 l l l,那么所有给定点都有一个对应区域表示区域内的点能够在 l l l 步内到达它,我们判断所有区域有没有公共部分就好了。所有点的区域可以用 线性规划 表示。设当前点坐标是 ( x 0 , y 0 ) (x_0, y_0) (x0,y0),那么对于一个能够在 l l l 步内到达它的点 ( x , y ) (x, y) (x,y) 而言,需要满足一下不等关系:

x ≤ x 0 + l x \leq x_0 + l xx0+l
x ≥ x 0 − l x \geq x_0 - l xx0l
y ≤ y 0 + l y \leq y_0 + l yy0+l
y ≥ y 0 − l y \geq y_0 - l yy0l
x − y ≤ x 0 − y 0 + l x - y \leq x_0 - y_0 + l xyx0y0+l
x − y ≥ x 0 − y 0 − l x - y \geq x_0 - y_0 - l xyx0y0l

       我们维护答案点 x x x 的范围, y y y 的范围, x − y x - y xy 的范围。最后枚举 x x x 的范围内的数,检验存不存在合法解就好了。

       时间复杂度 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)

CODE:

#include<bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
const int M = 1e6 + 10;
typedef pair< int, int > PII;
int n, x[N], y[N], lx, rx, ly, ry, lz, rz, resb, resn;// 分别是 x 的限制, y的限制, 和 x - y 的限制 
char str[M];
PII check(int l){lx = ly = 0;lz = -1e8;rx = ry = rz = 1e8;for(int i = 1; i <= n; i++){lx = max(lx, x[i] - l);rx = min(rx, x[i] + l);ly = max(ly, y[i] - l);ry = min(ry, y[i] + l);lz = max(lz, x[i] - y[i] - l);rz = min(rz, x[i] - y[i] + l);}if(rx <= 0 && ry <= 0) return make_pair(-1, -1);for(int i = max(lx, 0); i <= rx; i++){int tl = i - rz, tr = i - lz;tl = max(tl, ly); tr = min(tr, ry);if(tl <= tr){if(tr > 0 || i > 0) return make_pair(i, tr);}}return make_pair(-1, -1);
}
int main(){scanf("%d", &n);for(int i = 1; i <= n; i++){scanf("%s", str + 1);int len = strlen(str + 1);for(int j = 1; j <= len; j++){if(str[j] == 'B') x[i]++;else y[i]++;}}int l = 0, r = 2e6 + 10, mid, res = -1;while(l <= r){mid = (l + r >> 1);PII k = check(mid);if(k != make_pair(-1, -1)){res = mid;resb = k.first, resn = k.second;r = mid - 1;}else l = mid + 1;}printf("%d\n", res);for(int i = 1; i <= resb; i++) putchar('B');for(int i = 1; i <= resn; i++) putchar('N');return 0;
}

Bracket Insertion

题面

分析:
       详见这里

Conveyor

题面

分析:
       详见这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/185740.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ 消息中间件

消息中间件 1、简介 消息中间件也可以称消息队列&#xff0c;是指用高效可靠的消息传递机制进行与平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型&#xff0c;可以在分布式环境下扩展进程的通信。 当下主流的消息中间…

YOLOX: Exceeding YOLO Series in 2021(2021.8)

文章目录 AbstractIntroduction介绍前人的工作提出问题解决 YOLOXYOLOX-DarkNet53Implementation detailsYOLOv3 baselineDecoupled headStrong data augmentationAnchor-freeMulti positivesSimOTAEnd-to-end YOLOOther BackbonesModified CSPNet in YOLOv5Tiny and Nano dete…

深入理解JVM虚拟机第二十二篇:详解JVM当中与操作数栈相关的字节码指令

大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c;获益匪浅。现在把孙哥视频分享给大家。 孙哥链接&#xff1a;孙哥个人主页 作者简介&#xff1a;一个颜值99分&#xff0c;只比孙哥差一点的程序员 本专栏简介&#xff1a;话不多说&#xff0c;让我们一起干翻J…

C++ —— map 和 multimap

一、map 1.介绍 1. map是关联容器&#xff0c;它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元 素。 2. 在map中&#xff0c;键值key通常用于排序和惟一地标识元素&#xff0c;而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同&am…

【Linux精讲系列】——vim详解

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;c入门第一个程序和基本知识讲解 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;宁静是一片强大而治愈的神奇海洋&#xff01; 目录 目录 ​作者…

【教3妹学编程-算法题】 在树上执行操作以后得到的最大分数

3妹&#xff1a;2哥&#xff0c;今日都立冬了&#xff0c; 可是天气一点都不冷。 2哥 : 立冬了&#xff0c;晚上要不要一起出去吃饺子&#xff1f;&#x1f95f; 3妹&#xff1a;好呀好呀&#xff0c;2哥请吃饺子喽 2哥 : 歪歪&#xff0c;我说的是一起出去吃&#xff0c;没说我…

CSS实现鼠标移至图片上显示遮罩层及文字效果

效果图&#xff1a; 1、将遮罩层html代码与图片放在一个div 我是放在 .proBK里。 <div class"proBK"><img src"../../assets/image/taskPro.png" class"proImg"><div class"imgText"><h5>用户在线发布任务&l…

另辟蹊径者 PoseiSwap:背靠潜力叙事,构建 DeFi 理想国

前不久&#xff0c;灰度在与 SEC 就关于 ETF 受理的诉讼案件中&#xff0c;以灰度胜诉告终。灰度的胜利&#xff0c;也被加密行业看做是加密 ETF 在北美地区阶段性的胜利&#xff0c; 该事件也带动了加密市场的新一轮复苏。 此前&#xff0c;Nason Smart Money 曾对加密市场在 …

SHCTF-校外赛道

SHCTF-校外赛道 [WEEK1]babyRCE 1 (1)more:一页一页的显示档案内容2 (2)less:与 more 类似&#xff0c;但是比 more 更好的是&#xff0c;他可以[pg dn][pg up]翻页3 (3)head:查看头几行4 (4)tac:从最后一行开始显示&#xff0c;可以看出 tac 是 cat 的反向显示5 (5)tail:查看…

【Springboot】Vue3-Springboot引入JWT实现登录校验以及常见的错误解决方案

文章目录 前言一、JWT简单介绍二、token校验设计思路三、使用步骤Springboot部署JWT引入依赖&#xff1a;创建登录实体类后端&#xff1a;LoginController.java路由守卫函数 四、问题 前言 项目版本&#xff1a; 后端&#xff1a; Springboot 2.7、 Mybatis-plus、Maven 3.8.1…

JavaFX入门和网格布局面板的使用,Dao层交互,舞台与场景切换以及其他控件的使用

网格布局 将整个面板划分为若干个格子 , 每个格子的大小是一样的 , 每个格子中可以放置一个控件&#xff08;布局&#xff09; , 类似于表格的方式。在网格布局 中放入控件的时候 , 还需要指定位置。 GridPane gridPane new GridPane(); 我们将要排出这个布局 , 也就是登陆页…

JVM之jinfo虚拟机配置信息工具

jinfo虚拟机配置信息工具 1、jinfo jinfo&#xff08;Configuration Info for Java&#xff09;的作用是实时地查看和调整虚拟机的各项参数。 使用jps -v 可以查看虚拟机启动时显示指定的参数列表&#xff0c;但是如果想知道未被显示指定的参数的系统默认值&#xff0c;除 …

MySQL的高阶语句

数据库的权限一般很小&#xff0c;工作中使用最多的场景就是查 排序、分组、子查询、视图、多表连接查询&#xff08;左连接、右连接、内连接&#xff09; create TABLE info ( id int(4) primary key, NAME varchar(5) not null, score decimal(5,2), address varchar(20)…

在 Gorm 中学习分页和排序

一个全面的指南&#xff0c;教您在 GORM 中实现分页和排序&#xff0c;以实现高效的数据检索和展示 高效的数据检索和展示是应用程序开发的关键方面。GORM&#xff0c;强大的 Go 对象关系映射库&#xff0c;为开发人员提供了强大的工具来实现这一目标。在本指南中&#xff0c;…

【数据结构】二叉树的遍历递归算法详解

二叉树的遍历 &#x1f4ab;二叉树的结点结构定义&#x1f4ab;创建一个二叉树结点&#x1f4ab;在主函数中手动创建一颗二叉树&#x1f4ab;二叉树的前序遍历&#x1f4ab;调用栈递归——实现前序遍历&#x1f4ab;递归实现中序和后序遍历 &#x1f4ab;二叉树的结点结构定义 …

百面深度学习-循环神经网络

循环神经网络 什么是循环神经网络&#xff1f; 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一类用于处理序列数据的神经网络。你可以将它想象成一个机器&#xff0c;它不仅考虑当前的输入&#xff0c;还考虑之前接收过的输入。这使得它非…

本地生活餐饮视频怎么拍摄能有更多流量?如何批量生产呢?

本地生活近几年特别的火&#xff0c;所以到现在各类内容雷同性也比较高&#xff0c;视频缺少新的创意和玩法&#xff0c;像餐饮店的视频&#xff0c;大部分都是拍顾客进门、拍餐饮店座无虚席的实景……作为用户&#xff0c;其实早就已经看腻了。 今天推荐本地生活餐饮店商家拍…

b 树和 b+树的理解

&#xff08;本文引自mic老师面试文档&#xff09; 数据结构与算法问题&#xff0c;困扰了无数的小伙伴。 很多小伙伴对数据结构与算法的认知有一个误区&#xff0c;认为工作中没有用到&#xff0c;为什么面试要问&#xff0c;问了能解决实际问题&#xff1f; 图灵奖获得者&am…

手把手教你:LLama2原始权重转HF模型

LLama2是meta最新开源的语言大模型&#xff0c;训练数据集2万亿token&#xff0c;上下文长度由llama的2048扩展到4096&#xff0c;可以理解和生成更长的文本&#xff0c;包括7B、13B和70B三个模型&#xff0c;在各种基准集的测试上表现突出&#xff0c;该模型可用于研究和商业用…

Android sqlite 使用简介

进行Android应用开发时经常会用到数据库。Android系统支持sqlite数据库&#xff0c;在app开发过程中很容易通过SQLiteOpenHelper使用数据库&#xff0c;SQLiteOpenHelper依赖于Context对象&#xff0c;但是基于uiatomator1.0和Java程序等无法获取Context的应用如何使用数据库呢…