考虑到PAT甲级考试和开学后的XCPC比赛,决定寒假把PAT (Advanced Level) Practice刷完,进度条会在这篇博客下更新。由于主要以记录为主,大体上不会像单篇题解那么详细,但是对问题的思考,代码的简洁性、可读性还是有保障的,欢迎看到的小伙伴和我讨论


2021.1.10

1001 A+B Format (20分)

很久没写题了,没想到卡了半个小时,惭愧。这里是要把结果用逗号分隔成三组,即以千为单位,不足的话则不必要填逗号,我最多只添了一个逗号,要看清题目意思再动笔

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int a, b, c, d;
int main(){
scanf("%d%d", &a, &b);
int num = a + b, tmp = abs(num);
c = tmp / 1000000, tmp %= 1000000;
d = tmp / 1000, tmp %= 1000;
if(num<0) printf("-");
if(abs(num)>=1000000) printf("%d,%03d,%03d", c, d, tmp);
else if(abs(num)>=1000) printf("%d,%03d", d, tmp);
else printf("%d", tmp);
}

其他做法:

https://zhuanlan.zhihu.com/p/64035132

https://www.cnblogs.com/chenchen-12/p/10084579.html

1002 A+B for Polynomials (25分)

由于多项式合并后,可能出现原本是-1和+1,相加后就成为0的情况,这不能通过在输入时计数方式判断最后的非零项有多少

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 1e3+100;
int n, cnt, id;
float a[maxn], val;
int main(){
for(int i = 1; i <= 2; i++){
scanf("%d", &n);
for(int j = 1; j <= n; j++){
scanf("%d%f", &id, &val);
//if(a[id]==0) cnt++;
a[id] += val;
}
}
for(int i = 0; i < maxn; i++)
if(a[i]!=0) cnt++;
printf("%d", cnt);
for(int i = 1000; i >= 0; i--){
if(a[i]!=0) printf(" %d %.1f", i, a[i]);
}
}

2021.1.12

1005 Spell It Right (20分)

注意数字对应的英文要写对,submit的时候不要把debug的信息也显示

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
const int maxn = 150;
map<int, string> a;
string s, tmp;
int ans;
void init(){
a[0] = "zero", a[1] = "one", a[2] = "two", a[3] = "three", a[4] = "four";
a[5] = "five", a[6] = "six", a[7] = "seven", a[8] = "eight", a[9] = "nine";
}
int main(){
init();
cin >> s;
for(int i = 0; s[i]; i++)
ans += s[i]-'0';
tmp = to_string(ans);
//cout << tmp << endl;
int len = tmp.length();
for(int i = 0; i < len; i++){
cout << a[tmp[i]-'0'];
if(i!=len-1) cout << " ";
}
}

 1006 Sign In and Sign Out (25分)

string比较大小即可

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
const int maxn = 1e3+100;
int n;
string id, a, b, min_s = "23:59:59", max_s = "00:00:00", in, out;
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
cin >> id >> a >> b;
if(a<min_s) min_s = a, in = id;
if(b>max_s) max_s = b, out = id;
}
cout << in << " " << out;
}

1007 Maximum Subsequence Sum (25分)

基本的dp问题,最大连续区间和:

定义dp[i]为以i结尾的最大连续和,转移方程为:dp[i] = max(a[i], dp[i-1],+a[i])

坑点在于英文阅读理解:

If all the K numbers are negative, then its maximum sum is defined to be 0, and you are supposed to output the first and the last numbers of the whole sequence.

这句话等价于当最大区间和小于0时,输出整个序列的第一个元素和最后一个元素。还有个是我自己没看清楚,应该输出最小下标对应的元素,而不是下标。

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
#define ll long long
#define inf 0x3f3f3f
using namespace std;
const int maxn = 1e4+100;
int n, id, front, tear, ans = -1;
int a[maxn], dp[maxn];
int main(){
scanf("%d", &n);
front = 1, tear = n;
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
if(dp[i-1]>0) dp[i] = dp[i-1] + a[i];
else dp[i] = a[i], id = i;
if(ans<dp[i]) ans = dp[i], front = id, tear = i;
}
printf("%d %d %d", ans>=0 ? ans : 0, a[front], a[tear]);
}

1008 Elevator (20分)

模拟题

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
#define ll long long
#define inf 0x3f3f3f
using namespace std;
const int maxn = 1e4+100;
int n, sum, now, tmp;
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &tmp);
int num = tmp-now;
sum += num > 0 ? num*6 : num*(-4);
now = tmp;
}
sum += 5*n;
printf("%d", sum);
}

1009 Product of Polynomials (25分)

模拟多项式乘法,注意细节即可

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
#define ll long long
#define inf 0x3f3f3f
using namespace std;
const int maxn = 2e3+100;
int n, m, id, cnt;
float val, ans[maxn];
struct node{
int id;
float val;
}now[1100];
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d%f", &now[i].id, &now[i].val);
scanf("%d", &m);
for(int i = 1; i <= m; i++){
scanf("%d%f", &id, &val);
for(int j = 1; j <= n; j++){
ans[id+now[j].id] += now[j].val*val;
}
}
for(int i = maxn-1; i >= 0; i--)
if(ans[i]!=0) cnt++;
printf("%d", cnt);
for(int i = maxn-1; i >= 0; i--){
if(ans[i]!=0)
printf(" %d %.1f", i, ans[i]);
}
}

2021.1.13

晚上看了很久的二分,不太理解其中的细节,卡了一晚上,对自己的智商感到深深的怀疑

1004 Counting Leaves (30分)


 2021.1.14

感觉很久没写算法手已经很生了,主要是很多算法自己明明思考证明过,也写过,但是现在再写一遍还是会忘记。反思后觉得,还是要脚踏实地多刷题才是根本,然后就是感性理解算法是很重要的一环,一定要在脑海里有个形象的记忆,懂其中的思想。因为就算之前很严密的证明过一次,过段时间后这种严密的证明大概率会忘掉很多,再来一遍也很繁琐,但是不去细看又不太懂为什么他那样做是正确的,又会感到很疑惑。能证明这个算法的正确性和想出来这个算法那还是不太一样的。有人交流往往是幸福的,尤其是在现实中,没有的话只能在网上多看看优质的文章与讨论。(这篇博客给了我些感悟)

1003 Emergency (25分)

大意是求最短路径的条数及路径的最大点权和,可能阅读理解能力有限,看完别人博客才知道题目要求的是路径的最大点权和

复习了下邻接表存图和Dijkstra找最短路,以下可以帮助理解Dijkstra算法:

大概是这样一个场景:往源点S注水,队列代表水目前能够流到的节点,队列里面标记了水流到节点的时刻。我们用优先队列模拟水流动的过程, 队头表示就是当前水流到的节点,这时与它相邻的节点也会被流到,更新节点被流到的时刻即可。显然点p第一次被水流到的时刻,就是S到p的最短路径(水的流速为1)。d[v]<p.first表示已经被水流过的节点不用进行处理了(已经处理过)

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <vector>
#include <cmath>
#define ll long long
#define pb push_back
#define inf 0x3f3f3f
#define pii pair<int, int>
using namespace std;
const int maxn = 1e4+100;
struct edge{
int to, cost;
};
vector<edge> g[maxn];
int n, m;
int u, v, val, w[maxn];
int s, t, d[maxn], num[maxn], tot[maxn];
void dijkstra(){
for(int i = 1; i <= n; i++) d[i] = inf;
priority_queue<pii, vector<pii>, greater<pii> >que;
que.push({0, s}), d[s] = 0, num[s] = 1, tot[s] = w[s];
while(!que.empty()){
pii p = que.top(); que.pop();
int u = p.second;
if(d[u]<p.first) continue;
int cnt = g[u].size();
for(int i = 0; i < cnt; i++){
edge e = g[u][i];
int v = e.to, cost = e.cost;
if(d[u]+cost<d[v]){
d[v] = d[u] + cost;
tot[v] = tot[u] + w[v];
num[v] = num[u];
que.push({d[v], v});
}
else if(d[u]+cost==d[v]){
tot[v] = max(tot[v], tot[u]+w[v]);
num[v] += num[u];
}
}
}
} int main(){
scanf("%d%d%d%d", &n, &m, &s, &t);
for(int i = 0; i <= n-1; i++) scanf("%d%", &w[i]);
while(m--){
scanf("%d%d%d", &u, &v, &val);
g[u].pb({v, val}), g[v].pb({u, val});
}
dijkstra();
//for(int i = 0; i <= n-1; i++) printf("%d ", d[i]);
printf("%d %d", num[t], tot[t]);
}

reference:

https://blog.csdn.net/CV_Jason/article/details/80891055

https://blog.csdn.net/u012161251/article/details/104151880

1011 World Cup Betting (20分)

水题

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <vector>
#include <cmath>
#define ll long long
#define pb push_back
#define inf 0x3f3f3f
#define pii pair<int, int>
using namespace std;
const int maxn = 1e4+100;
float a, b, c, res = 1, ans;
char s[4];
int main(){
for(int i = 1; i <= 3; i++){
scanf("%f%f%f", &a, &b, &c);
float tmp = max(a, max(b, c));
if(tmp==a) s[i] = 'W';
else if(tmp==b) s[i] = 'T';
else s[i] = 'L';
res *= tmp;
}
ans = (res*0.65-1)*2;
printf("%c %c %c %.2f", s[1], s[2], s[3], ans);
}

1012 The Best Rank (25分)

注意不要发生复制粘贴后代码未修改的低级错误,再就是数据范围,不然会出现段错误。对数据排序,最后二分查找相应位置即可。

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <vector>
#include <cmath>
#define ll long long
#define pb push_back
#define inf 0x3f3f3f
#define pii pair<int, int>
using namespace std;
const int maxn = 2e3+100;
struct score{
int c, m, e, a;
}a[1000100];
bool cmp(int a, int b){
return a > b;
}
int n, m, id;
int x[maxn], y[maxn], z[maxn], w[maxn];
bool vis[1000100];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
scanf("%d", &id), vis[id] = 1;
scanf("%d%d%d", &a[id].c, &a[id].m, &a[id].e);
//cout << a[id].c << " "<< a[id].c << " "<< a[i].e <<endl;
a[id].a = (a[id].c+a[id].m+a[id].e)/3;
x[i] = a[id].c, y[i] = a[id].m, z[i] = a[id].e, w[i] = a[id].a;
}
sort(x+1, x+1+n, cmp), sort(y+1, y+1+n, cmp), sort(z+1, z+1+n, cmp), sort(w+1, w+1+n, cmp);
while(m--){
scanf("%d", &id);
if(!vis[id]){
printf("N/A\n");
continue;
}
int r1 = lower_bound(x+1, x+1+n, a[id].c, greater<int>())-x;
int r2 = lower_bound(y+1, y+1+n, a[id].m, greater<int>())-y;
int r3 = lower_bound(z+1, z+1+n, a[id].e, greater<int>())-z;
int r4 = lower_bound(w+1, w+1+n, a[id].a, greater<int>())-w;
int r = min(min(r1, r2), min(r3, r4));
printf("%d ", r);
if(r==r4) printf("A\n");
else if(r==r1) printf("C\n");
else if(r==r2) printf("M\n");
else if(r==r3) printf("E\n");
}
}

2021.1.15 

1014 Waiting in Line (30分)

一道模拟题,显然的思路是开始先将客户依次排到队列中去,排满后剩下的客户选择排到业务处理的最快的队伍中去,记录时间戳即可。

难倒是不难,就是有些细节需要想清楚,我在栽在两个坑点上:

  • 判断一个客户无法完成服务是根据他的开始服务时间应该在15:00之前,而不是以结束时间为依据
  • 根据思路分两步处理,但是忽略了n*m可能会比k要大,造成数据输入不足

写的时候想清楚这个过程就好,重点在于细节没想到位,搜完博客后发现第一个坑点,第二个坑点苦思冥想了很久,不过最后写出来的代码相比其他人要简洁的多,并且有附加的附加调试信息

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 2e3+100;
int n, m, k, q, w[maxn];
int que[maxn][maxn], id[maxn], p[maxn], sum[maxn][maxn], res[maxn];
int main(){
scanf("%d%d%d%d", &n, &m, &k, &q);
for(int i = 1; i <= min(n*m, k); i++) {
scanf("%d", &w[i]);
que[(i-1)%n][(i-1)/n+1] = i, id[(i-1)%n]++;
res[i] = sum[(i-1)%n][(i-1)/n+1] = sum[(i-1)%n][(i-1)/n] + w[i];
}
for(int i = 0; i <= n-1; i++) p[i] = 1;
for(int i = min(n*m, k)+1; i <= k; i++){
scanf("%d", &w[i]);
int tmp = inf, now;
for(int j = 0; j <= n-1; j++){
if(sum[j][p[j]]<tmp) tmp = sum[j][p[j]], now = j;
}
p[now]++, id[now]++;
que[now][id[now]] = i;
res[i] = sum[now][id[now]] = sum[now][id[now]-1] + w[i];
}
while(q--){
int query;
scanf("%d", &query);
//cout << res[query] << endl;
if(res[query]-w[query]>=540) printf("Sorry\n");
else printf("%02d:%02d\n", 8+res[query]/60, res[query]%60);
} }

reference:

https://www.cnblogs.com/codervivi/p/12867049.html

2021.1.17

1015 Reversible Primes (20分)

WA一发后,想了几个样例测试了一下,发现自己漏掉了一个点:1不是素数。另外这题竟然不用素数筛和快速幂,惊了,当时想着先暴力试试,不行再优化,结果就过了。不过说实话素数筛和快速幂每次套板子,自己都已经不会写了,这位杨感觉不太行的样子。

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <vector>
#include <cmath>
#define ll long long
#define pb push_back
#define inf 0x3f3f3f3f
#define pii pair<int, int>
using namespace std;
const int maxn = 2e3+100;
bool judge(int n){
if(n==1) return false;
for(int i = 2; i <= n/i; i++)
if(n%i==0) return false;
return true;
}
int change(int n, int d){
int res = 0, a[100], t = 0;
while(n){
a[++t] = n%d;
n /= d;
}
for(int i = 1; i <= t; i++)
res += a[i]*pow(d, t-i);
return res;
}
int main(){
int n, d;
while(scanf("%d", &n)&&n>0){
scanf("%d", &d);
if(judge(n)&&judge(change(n, d))) printf("Yes\n");
else printf("No\n");
}
}

1010 Radix (25分)

题目的大意是,给你两个数,N1和N2,给定其中一个数的基数,然后求另一个数的基数,使得两个数相等

这题有的地方没有给清楚,感觉有点小问题。给定标签的数不会溢出,而未给定标签的数是会溢出long long的,这点题目没有直接说明,溢出的部分需要用<0去判断。再就是二分的下限取小了,反而WA。

这里主要是对二分法的运用,我自己有个点是没有注意到的就是,求这个数的基数,如何取其上下限。如果这个数大于一位,当这个数最小为10时可以取到最大的基数即这个数的十进制,最小就是其各位的最大数字+1.但是当这个数字只有1位的时候,套用上述的方法显然就会出错,这样取得上限比下限还小,这种情况稍微处理一下就好了。

这会借着还复习了下二分法和快速幂(倍增思想(由于事先知道跳跃步数,采用二进制分解,边计算边跳跃的方式)和分治思想(将问题划分为规模更小的子问题))

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
#define ll long long
#define inf 0x3f3f3f
using namespace std;
string s1, s2;
ll id, radix;
ll qpow(ll a, ll n){
ll ans = 1;
while(n){
if(n&1) ans *= a; //ans乘上当前的a
a *= a; //a自乘
n >>= 1; //n往右移一位
}
return ans;
}
ll handle(string s, ll d){
ll len = s.length(), num;
ll sum = 0;
for(int i = 0; i < len; i++){
if(s[i]<='9') num = s[i]-'0';
else num = s[i]-'a'+10;
sum += num*qpow(d, len-1-i);
}
return sum;
}
int main(){
cin >> s1 >> s2 >> id >> radix;
if(id==2) swap(s1, s2);
//cout << s1 << " " << s2;
ll tmp = handle(s1, radix);
//二分+快速幂
//char c=*max_element(str.begin(),str.end());
int cnt = -1;
for(int i = 0; s2[i]; i++){
if(s2[i]<='9') cnt = max(cnt, s2[i]-'0');
else cnt = max(cnt, s2[i]-'a'+10);
}
ll l = cnt, r = max(l, tmp)+1;
while(r-l>1){
ll mid = (l+r)/2;
ll res = handle(s2, mid);
if(res>=tmp||res<0) r = mid;
else l = mid;
}
if(handle(s2, r)==tmp) printf("%lld\n", r);
else printf("Impossible\n");
}

reference:

https://segmentfault.com/a/1190000037525090

https://blog.csdn.net/CV_Jason/article/details/80993283

https://blog.csdn.net/d891320478/article/details/8303072

https://blog.csdn.net/weixin_30782331/article/details/98610783


2021.1.17

从今天开始就要按照专题更加有效的复习了,专题会专门写几篇博客,陆续会把前几天写的题目整理进专题,希望这样写题会更加有效率

1051 Pop Sequence (25分)

1056 Mice and Rice (25分)


2021.1.19

1060 Are They Equal (25分)

1039 Course List for Student (25分)

1047. Student List for Course


2021.1.21

1054 The Dominant Color (20分)

大水题

#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <map>
#include <queue>
#include <vector>
#include <cmath>
#define ll long long
#define inf 0x3f3f3f
#define pii pair<int, int>
#define pb push_back
using namespace std;
const int maxn = 1e8+100;
int n, m, num, ans, cnt[maxn];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
scanf("%d%", &num);
if(++cnt[num]>m*n/2) ans = num;
}
}
printf("%d", num);
}

1071 Speech Patterns (25分)

1100 Mars Numbers (20分)


2021.1.22

1022 Digital Library (30分)

1063 Set Similarity (25分)


2021.1.24

基础的东西也要常练常思考,知道和掌握是两码事,这里面还有很多细节性的东西,不是说我看懂了一遍就能很快的写对题目

1032 Sharing (25分)

1052 Linked List Sorting (25分)

1074 Reversing Linked List (25分)


2021.1.26

最近有点松懈了,该做的事应该形成习惯,不然会越来越懒

1097 Deduplication on a Linked List (25分)


2021.1.27

早上被说人说了一顿,说能不能干点正经事,我想也是,我这人就是欠骂

1091 Acute Stroke (30point(s))


2021.1.28

1103 Integer Factorization (30分)

PTA刷题记录的更多相关文章

  1. PTA刷题记录(3)

    团队天梯赛-------(3)分值:15 给定一个 k 位整数 N=d​k−1​​10​k−1​​+⋯+d​1​​10​1​​+d​0​​ (0≤d​i​​≤9, i=0,⋯,k−1, d​k−1​​ ...

  2. PTA刷题记录(1)

    团队天梯赛-------(2)分值:20 题目要求:你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** ***   *  *** ***** 所谓“沙漏形状” ...

  3. PTA刷题笔记

    PTA刷题记录 仓库地址: https://github.com/Haorical/Code/tree/master/PTA/GPLT 两周之内刷完GPLT L2和L3的题,持续更新,包括AK代码,坑 ...

  4. PE刷题记录

    PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...

  5. leetcode刷题记录--js

    leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...

  6. Leetcode刷题记录(python3)

    Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...

  7. 刷题记录:[HarekazeCTF2019]encode_and_encode

    目录 刷题记录:[HarekazeCTF2019]encode_and_encode 一.知识点 JSON转义字符绕过 php伪协议 刷题记录:[HarekazeCTF2019]encode_and_ ...

  8. 刷题记录:[De1CTF 2019]Giftbox && Comment

    目录 刷题记录:[De1CTF 2019]Giftbox && Comment 一.知识点 1.sql注入 && totp 2.RCE 3.源码泄露 4.敏感文件读取 ...

  9. 刷题记录:[强网杯 2019]Upload

    目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challe ...

随机推荐

  1. Github美化 添加徽章

    Github美化 添加徽章 0. 前言 1. 准备 2. 开始 a. 打开shields.io b.制作静态徽章 c.制作动态徽章 d. 结果 3.额外 0. 前言 之前看见很多大项目都有很多勋章,比 ...

  2. Linux学习笔记 | 常见错误之无法获得锁

    问题: 当运行sudo apt-get install/update/其他命令时,会出现如下提示: E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资 ...

  3. 行业动态 | 利用Cassandra数据库揭开家族祖先的秘密

        FamilySearch选择了基于Apache Cassandra的DataStax Enterprise (DSE)来加速用户增长,并通过更快的反应时间.高可用性以及零数据库宕机来提供强大的 ...

  4. 安装Tomcat 9

    文章目录 访问Tomcat官网 选择下载所需的软件包 安装Tomcat 测试安装 访问Tomcat官网 Tomcat官方的下载地址为:https://tomcat.apache.org/downloa ...

  5. C# 请求被中止: 未能创建 SSL/TLS 安全通道。 设置SecurityProtocol无效

    今天为了获取一张图片,用了一段代码: ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateV ...

  6. 宝塔的url计划任务

    to通过url访问 就像访问你的网站一样 然后控制器/方法里面写你要做的操作 就可以了 ,简单的一批

  7. Vijos-P1103题解【线段树】

    本文为原创,转载请注明:http://www.cnblogs.com/kylewilson/ 题目出处: https://www.vijos.org/p/1103 题目描述: 一条马路从数轴0到L,每 ...

  8. Javadoc命令与API

    Javadoc命令与API Javadoc工具会抽取类,成员,方法的文档注释生成与这个类配套的API帮助文档 Javadoc命令和文档注释小公司基本不用,但我们应养成良好的编码习惯,所以还是了解一下 ...

  9. Flask扩展点总结(信号)

    信号(源码) 信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作. pip3 install blinker 根据flask项目的请求流程来进行设置扩展点 1.中间件 from ...

  10. ElasticSearch-IK分词器和集成使用

    1.查询存在问题分析 在进行字符串查询时,我们发现去搜索"搜索服务器"和"钢索"都可以搜索到数据: 而在进行词条查询时,我们搜索"搜索"却没 ...