[ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)

一次性写两道题

  • T1:一个简单的询问
    • 题目
    • 题解
    • 代码实现
  • T2:愤怒的小鸟
    • 题目
    • 暴搜题解
    • 暴搜代码实现
    • 状压DP题解
    • 状压DP代码实现

T1:一个简单的询问

题目

给你一个长度为 N 的序列 ai ,1≤i≤N,和 q 组询问,每组询问读入 l1,r1,l2,r2,需输出
∞∞
∑get(l1,r1,x)⋅get(l2,r2,x)∑get(l1,r1,x)⋅get(l2,r2,x)get(l1,r1,x)get(l2,r2,x)
x=0x=0x=0
get(l,r,x) 表示计算区间 [l,r] 中,数字 x 出现了多少次。

输入格式
第一行,一个数字 N,表示序列长度。
第二行,N 个数字,表示 a1∼aN
第三行,一个数字 Q,表示询问个数。
第 4∼Q+3 行,每行四个数字 l1,r1,l2,r2,表示询问。
输出格式
对于每组询问,输出一行一个数字,表示答案。

输入输出样例
输入
5
1 1 1 1 1
2
1 2 3 4
1 1 4 4
输出
4
1
说明/提示
对于20% 的数据,1≤N,Q≤1000;
对于另外 30% 的数据,1≤ai≤50;
对于 100% 的数据,N,Q≤50000,1≤ai≤N,1≤l1≤r1≤N,1≤l2≤r2≤N

答案有可能超过 int 的最大值

题解

首先对于一个区间,我们考虑对它进行转化,使用差分
get(l,r,x)=get(1,r,x)−get(1,l−1,x)get(l,r,x)=get(1,r,x)-get(1,l-1,x)get(l,r,x)=get(1,r,x)get(1,l1,x)
那么答案也就可以转化为
∑x=0∞get(l1,r1,x)⋅get(l2,r2,x)\sum_{x=0}^\infty get(l1,r1,x)⋅get(l2,r2,x)x=0get(l1,r1,x)get(l2,r2,x)
⇓\Downarrow
∑x=0∞[get(1,r1,x)−get(1,l1−1,x)]∗[get(1,r2,x)−get(1,l2−1,x)]\sum_{x=0}^\infty [get(1,r1,x)-get(1,l1-1,x)]*[get(1,r2,x)-get(1,l2-1,x)] x=0[get(1,r1,x)get(1,l11,x)][get(1,r2,x)get(1,l21,x)]
⇓\Downarrow
∑x=0∞get(1,r1,x)∗get(1,r2,x)−get(1,r1,x)∗get(1,l2−1,x)\sum_{x=0}^\infty get(1,r1,x)*get(1,r2,x)-get(1,r1,x)*get(1,l2-1,x)x=0get(1,r1,x)get(1,r2,x)get(1,r1,x)get(1,l21,x)
−get(1,l1−1,x)∗get(1,r2,x)+get(1,l1−1,x)∗get(1,l2−1,x)-get(1,l1-1,x)*get(1,r2,x)+get(1,l1-1,x)*get(1,l2-1,x)get(1,l11,x)get(1,r2,x)+get(1,l11,x)get(1,l21,x)


之后我们把它拆成四个询问块,再用一个sign记录前面的符号±
1.get(1,r1,x)∗get(1,r2,x)(+)get(1,r1,x)*get(1,r2,x)(+)get(1,r1,x)get(1,r2,x)(+)
2.get(1,r1,x)∗get(1,l2−1,x)(−)get(1,r1,x)*get(1,l2-1,x)(-)get(1,r1,x)get(1,l21,x)()
3.get(1,l1−1,x)∗get(1,r2,x)(−)get(1,l1-1,x)*get(1,r2,x)(-)get(1,l11,x)get(1,r2,x)()
4.get(1,l1−1,x)∗get(1,l2−1,x)(+)get(1,l1-1,x)*get(1,l2-1,x)(+)get(1,l11,x)get(1,l21,x)(+)
在这里插入图片描述


最后我们来考虑算法以及转移过程
因为这个并没有要求强制在线,其次它只有多个区间查询,并没有涉及到更新
所以莫队就相较于线段树更加适合,线段树有点大材小用了
get(1,r,x)∗get(1,l+1,x)=get(1,l,x)∗get(1,r,x)+sumget(1,r,x)*get(1,l+1,x)=get(1,l,x)*get(1,r,x)+sumget(1,r,x)get(1,l+1,x)=get(1,l,x)get(1,r,x)+sum
sum表示a[l]在[1,r]区间出现的次数
为森么是这样的呢??
我们思考除开a[l],其它值出现次数并未发生改变,所以对答案的影响也并没有改变
当l+1,就意味着多加了一个get(1,r,x),即
get(1,r,x)∗get(1,l+1,x)=[get(1,l,x)+get(l+1,l+1,x)]∗get(1,r,x)get(1,r,x)*get(1,l+1,x)=[get(1,l,x)+get(l+1,l+1,x)]*get(1,r,x)get(1,r,x)get(1,l+1,x)=[get(1,l,x)+get(l+1,l+1,x)]get(1,r,x)
那么同理r进行移动的时候,就要加减a[r]在[1,l]区间内出现的次数

故,我们用两个cntl[i],cntr[i]分别表示i在[1,l]出现的次数和i在[1,r]出现的次数


这里用的莫队算法,跟平常不太一样,平时是用于维护[l,r]区间,
而这里我们维护是是[1,l]和[1,r]
在这里插入图片描述

代码实现

#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
#define MAXN 50005
struct node {int id, l, r, sign, num;
}query[MAXN << 2];
int n, q, tot, sum;
int a[MAXN], cntl[MAXN], cntr[MAXN];
int result[MAXN];bool cmp ( node x, node y ) {return x.num == y.num ? x.r < y.r : x.num < y.num; 
}int main() {scanf ( "%d", &n );for ( int i = 1;i <= n;i ++ )scanf ( "%d", &a[i] );scanf ( "%d", &q );int T = ( int ) sqrt ( double ( n ) );for ( int i = 1;i <= q;i ++ ) {int l1, r1, l2, r2;scanf ( "%d %d %d %d", &l1, &r1, &l2, &r2 );query[++ tot] = ( node ) { i, r1, r2, 1, r1 / T };query[++ tot] = ( node ) { i, l1 - 1, r2, -1, ( l1 - 1 ) / T };query[++ tot] = ( node ) { i, l2 - 1, r1, -1, ( l2 - 1 ) / T };query[++ tot] = ( node ) { i, l1 - 1, l2 - 1, 1, ( l1 - 1 ) / T };}sort ( query + 1, query + tot + 1, cmp );int curl = 0, curr = 0;for ( int i = 1;i <= tot;i ++ ) {int l = query[i].l, r = query[i].r;while ( l < curl ) {cntl[a[curl]] --;sum -= cntr[a[curl]];curl --;}while ( l > curl ) {curl ++;cntl[a[curl]] ++;sum += cntr[a[curl]];}while ( r < curr ) {cntr[a[curr]] --;sum -= cntl[a[curr]];curr --;}while ( curr < r ) {curr ++;cntr[a[curr]] ++;sum += cntl[a[curr]];}result[query[i].id] += sum * query[i].sign;}for ( int i = 1;i <= q;i ++ )printf ( "%d\n", result[i] );return 0;
} 

T2:愤怒的小鸟

题目

Kiana 最近沉迷于一款神奇的游戏无法自拔。
简单来说,这款游戏是在一个平面上进行的。
有一架弹弓位于 (0,0) 处,每次 Kiana 可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如 y=ax^2+bx的曲线,其中 a,b是Kiana 指定的参数,且必须满足 a < 0,a,b 都是实数。
当小鸟落回地面(即 x 轴)时,它就会瞬间消失。

在游戏的某个关卡里,平面的第一象限中有 n 只绿色的小猪,其中第 i 只小猪所在的坐标为(xi,yi)
如果某只小鸟的飞行轨迹经过了(xi,yi),那么第 i 只小猪就会被消灭掉,同时小鸟将会沿着原先的轨迹继续飞行;
如果一只小鸟的飞行轨迹没有经过 (xi,yi),那么这只小鸟飞行的全过程就不会对第 i 只小猪产生任何影响。
例如,若两只小猪分别位于 (1,3)和 (3,3),Kiana 可以选择发射一只飞行轨迹为 y=-x^2+4x的小鸟,这样两只小猪就会被这只小鸟一起消灭。
而这个游戏的目的,就是通过发射小鸟消灭所有的小猪。

这款神奇游戏的每个关卡对 Kiana来说都很难,所以Kiana还输入了一些神秘的指令,使得自己能更轻松地完成这个游戏。这些指令将在【输入格式】中详述。
假设这款游戏一共有 TT 个关卡,现在 Kiana想知道,对于每一个关卡,至少需要发射多少只小鸟才能消灭所有的小猪。由于她不会算,所以希望由你告诉她。

输入格式
第一行包含一个正整数 T,表示游戏的关卡总数。
下面依次输入这 T 个关卡的信息。每个关卡第一行包含两个非负整数 n,m,分别表示该关卡中的小猪数量和 Kiana 输入的神秘指令类型。接下来的 n 行中,第 i行包含两个正实数xi,yi表示第 i 只小猪坐标为 (xi,yi)数据保证同一个关卡中不存在两只坐标完全相同的小猪。

如果 m=0,表示Kiana输入了一个没有任何作用的指令。
如果 m=1,则这个关卡将会满足:至多用⌈n/3+1⌉ 只小鸟即可消灭所有小猪。
如果 m=2,则这个关卡将会满足:一定存在一种最优解,其中有一只小鸟消灭了至少⌊n/3⌋ 只小猪。
保证1≤n≤18,0≤m≤2,0 <xi,yi < 100输入中的实数均保留到小数点后两位。

上文中,符号⌈c⌉ 和⌊c⌋ 分别表示对 c 向上取整和向下取整,例如:⌈2.1⌉=⌈2.9⌉=⌈3.0⌉=⌊3.0⌋=⌊3.1⌋=⌊3.9⌋=3。
输出格式
对每个关卡依次输出一行答案。
输出的每一行包含一个正整数,表示相应的关卡中,消灭所有小猪最少需要的小鸟数量。

输入输出样例
输入
2
2 0
1.00 3.00
3.00 3.00
5 2
1.00 5.00
2.00 8.00
3.00 9.00
4.00 8.00
5.00 5.00
输出
1
1

输入
3
2 0
1.41 2.00
1.73 3.00
3 0
1.11 1.41
2.34 1.79
2.98 1.49
5 0
2.72 2.72
2.72 3.14
3.14 2.72
3.14 3.14
5.00 5.00
输出
2
2
3

输入
1
10 0
7.16 6.28
2.02 0.38
8.33 7.78
7.68 2.09
7.46 7.86
5.77 7.44
8.24 6.72
4.42 5.11
5.42 7.79
8.15 4.99
输出
6

说明/提示
【样例解释1】
这组数据中一共有两个关卡。
第一个关卡与【问题描述】中的情形相同,2只小猪分别位于(1.00,3.00)和 (3.00,3.00),只需发射一只飞行轨迹为y = -x^2 + 4x的小鸟即可消灭它们。
第二个关卡中有5只小猪,但经过观察我们可以发现它们的坐标都在抛物线 y = -x^2 + 6x上,故Kiana只需要发射一只小鸟即可消灭所有小猪。

【数据范围】
在这里插入图片描述

暴搜题解

首先就是计算两个点的抛物线解析式(在状压题解中我就不再阐释)
y1=a1*x2+ b1*x
y2=a2*x2+b2*x
可以先把a算出来,也就得把b1,b2消掉,那么方程式分别乘上另一个方程式b的系数
再两式一减,把x移过去就可以了,即
b2*y1=a1*b2*x2+ b1*b2*x
b1*y2=a2*b1*x2+b1*b2*x


暴力的思路就是遍历每一只猪,在当前状态下已经用了多少只鸟(抛物线)
有多少只猪猪是一只猪孤单的死去
那么答案就是用的鸟的个数加上单独的猪的个数
1.猪猪可以多个匹配被一只鸟一次性杀死
2.猪太特殊了,只能单独找一鸟抵着它杀

那我们就枚举每一个猪猪的状态,单独被杀,或者和前后面的某些猪一起被杀
在这里插入图片描述


部分阐释在代码中有呈现

暴搜代码实现

#include <cmath>
#include <cstdio>
#define MAXN 20
int T, n, m, result;
double x[MAXN], y[MAXN];
double tx[MAXN], ty[MAXN];
double pwxa[MAXN], pwxb[MAXN];bool check ( double a, double b ) {return fabs ( a - b ) < 1e-7;
}void dfs ( int pig, int used, int alone ) {if ( used + alone >= result )//最优性剪枝,因为在这样下去//1.抛物线的个数+1,少了一只单独的猪-1,并不会使答案变小//2.猪仔之前与别的猪一起被一条抛物线经过了,就掠过它,答案也没有变//3.猪单独被一条抛物线经过+1,答案反而大了//所以这种时候往下搜索最多就是保持不变,一定大于当前最佳答案,就没有必要搜索了return;if ( pig > n ) {result = used + alone;return;}bool flag = 0;for ( int i = 1;i <= used;i ++ ) {//判断之前构造的抛物线有没有一条经过了这只猪if ( check ( pwxa[i] * x[pig] * x[pig] + pwxb[i] * x[pig], y[pig] ) ) {dfs ( pig + 1, used, alone );flag = 1;break;}}if ( ! flag ) {//看能不能把这只猪和单身的猪组个队一起死for ( int i = 1;i <= alone;i ++ ) {//特殊判断,如果x相同意味着,这是一条常函数,是不可能一起死的if ( check ( tx[i], x[pig] ) )continue;double a = ( y[pig] * tx[i] - ty[i] * x[pig] ) / ( x[pig] * x[pig] * tx[i] - tx[i] * tx[i] * x[pig] );double b = ( y[pig] - x[pig] * x[pig] * a ) / x[pig];if ( a < 0 ) {//要小于零才是匹配的组队pwxa[used + 1] = a;pwxb[used + 1] = b;double Ai = tx[i], Bi = ty[i];//这只猪已经和本层循环的猪配对了,就要把它踢出单身狗群体for ( int j = i;j < alone;j ++ ) {tx[j] = tx[j + 1];ty[j] = ty[j + 1];}dfs ( pig + 1, used + 1, alone - 1 );//回溯后,这只猪重获单身for ( int j = alone;j > i;j -- ) {ty[j] = ty[j - 1];tx[j] = tx[j - 1];}tx[i] = Ai;ty[i] = Bi;}}//本层循环的猪也加入单身行列tx[alone + 1] = x[pig];ty[alone + 1] = y[pig];dfs ( pig + 1, used, alone + 1 );}
}int main() {scanf ( "%d", &T );while ( T -- ) {result = 0x7f7f7f7f;scanf ( "%d %d", &n, &m );for ( int i = 1;i <= n;i ++ )scanf ( "%lf %lf", &x[i], &y[i] );dfs ( 1, 0, 0 );printf ( "%d\n", result );}return 0;
} 

状压DP题解

n≤18,在暴搜基础上我们就可以考虑状压DP
0表示这只猪还活着,1表示这只猪仔已经被鸟干死了


首先我们还是暴力跑个n2,去求出以任意两只猪构造一条抛物线,一次性能杀死多少猪
接着就是常规的状态转移了DP[s]DP[s]DP[s]表示当状态为s时,所用的最少抛物线个数
当s状态时枚举每一条抛物线与s进行或运算,有可能开始s就已经杀了某只猪
而这条抛物线让猪猪重复死亡了罢了
DP[s∣pwx[i][j]]=min(DP[s∣pwx[i][j],DP[s]+1)DP[s|pwx[i][j]]=min(DP[s|pwx[i][j],DP[s]+1)DP[spwx[i][j]]=min(DP[spwx[i][j],DP[s]+1)


此处还可以有一个优化
我们想一想如果pwx能打1,2,4,7,它会傻着先把后面的4,7杀了再跑回来搞1,4?
肯定是一路上不走回头路,不打回头猪啊!
所以我们就开一个数组记录当状态为s时最先打到的猪仔是谁
在这里插入图片描述

状压DP代码实现

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define eps 1e-7
#define MAXN 20
int n, m, T;
double x[MAXN], y[MAXN];
int pwx[MAXN][MAXN], dp[1 << MAXN];
int lowcount[1<< MAXN];bool check ( double u, double v ) {return fabs ( u - v ) < eps;
}void count ( double &a, double &b, double x1, double y1, double x2, double y2 ) {a = ( y1 * x2 - y2 * x1 ) / ( x1 * x1 * x2 - x2 * x2 * x1 );b = ( y1 - x1 * x1 * a ) / x1;
}int main() {for ( int i = 0;i < ( 1 << 18 );i ++ ) {int j = 1;while ( ( i & ( 1 << ( j - 1 ) ) ) && j <= 18 )j ++;lowcount[i] = j;}scanf ( "%d", &T );while ( T -- ) {scanf ( "%d %d", &n, &m );for ( int i = 1;i <= n;i ++ )scanf ( "%lf %lf", &x[i], &y[i] );memset ( dp, 0x7f, sizeof ( dp ) );memset ( pwx, 0, sizeof ( pwx ) );dp[0] = 0; for ( int i = 1;i <= n;i ++ ) {for ( int j = 1;j <= n;j ++ ) {if ( x[i] == x[j] )continue;double a, b;count ( a, b, x[i], y[i], x[j], y[j] );if ( a >= 0 ) continue;for ( int k = 1;k <= n;k ++ )if ( check ( a * x[k] * x[k] + b * x[k], y[k] ) )	pwx[i][j] |= ( 1 << ( k - 1 ) );}}for ( int i = 0;i < ( 1 << n );i ++ ) {int j = lowcount[i];dp[i | ( 1 << ( j - 1 ) )] = min ( dp[i | ( 1 << ( j - 1 ) )], dp[i] + 1 );for ( int k = 1;k <= n;k ++ )dp[i | pwx[j][k]] = min ( dp[i | pwx[j][k]], dp[i] + 1 );}printf ( "%d\n", dp[( 1 << n ) - 1] );} return 0;
} 

走了,如有疑问欢迎评论,欢迎指出错误在这里插入图片描述

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

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

相关文章

微软发布新的 Azure Pipelines 功能和集成

在最近举行的Connect()大会上&#xff0c;微软发布了几项新功能以及与 Azure Pipelines 的集成&#xff0c;包括 Visual Studio Code 的 Azure Pipelines 扩展、GitHub 版本管理、对 IoT 项目的支持以及 ServiceNow 集成。自从 9 月份推出 Azure Pipelines 以来&#xff0c;这种…

年末展望:Oracle 对 JDK收费和.NET Core 给我们的机遇

2018年就结束了&#xff0c;马上就要迎来2019年&#xff0c;这一年很不平凡&#xff0c;中美贸易战还在继续&#xff0c;IT互联网发生急剧变化&#xff0c;大量互联网公司开始裁员&#xff0c;微软的市值在不断上升 &#xff0c;在互联网公司的市值下跌过程中爬到了第一的位置&…

等比数列三角形 (数论 + 黄金分割点)+ JOISC 2016 Day3 T3 「电报」(基环树 + 拓扑排序)

文章目录T1&#xff1a;等比数列三角形题目题解代码实现T2&#xff1a;电报题目题解代码实现T1&#xff1a;等比数列三角形 题目 求三边都是 ≤n 的整数&#xff0c;且成等比数列的三角形个数 注意三角形面积不能为 0 注意 oeis 中未收录此数列&#xff0c;所以并不需要去搜了…

使用PerfView监测.NET程序性能(三):分组

在上一篇博客使用PerfView监测.NET程序性能&#xff08;二&#xff09;&#xff1a;Perfview的使用中&#xff0c;我们通过Perfview帮助文件中自带的代码来简单使用了Perfview&#xff0c;了解了基本操作。现在来看看Perfview中的分组操作&#xff08;Grouping&#xff09;。分…

【做题记录】构造题

CF468C Hack it! 题意&#xff1a; 令 \(F(x)\) 表示 \(x\) 的各个位上的数字之和&#xff0c;如 \(F(1234)123410\) 。 给定 \(a(a\le 10^{18})\) &#xff0c;请求出任意一组 \(l,r(l,r\le 10^{200})\) &#xff0c;要求满足&#xff1a; \[\sum_{il}^{r}F(i)\pmod{a}0 \]输出…

Star Way To Heaven (prim最小生成树) // [ NOIP提高组 2014]飞扬的小鸟(DP)

文章目录T1&#xff1a;Star Way To Heaven题目题解代码实现T2&#xff1a;飞扬的小鸟题目题解代码实现T1&#xff1a;Star Way To Heaven 题目 小 w 伤心的走上了 Star way to heaven。 到天堂的道路是一个笛卡尔坐标系上一个 n*m 的长方形通道 顶点在 (0,0) 和 (n,m) 。 小…

IdentityServer4-客户端的授权模式原理分析(三)

在学习其他应用场景前&#xff0c;需要了解几个客户端的授权模式。首先了解下本节使用的几个名词Resource Owner&#xff1a;资源拥有者&#xff0c;文中称“user”&#xff1b;Client为第三方客户端&#xff1b;Authorization server为授权服务器&#xff1b;redirection URI&…

[2019 牛客CSP-S提高组赛前集训营4题解] 复读数组(数论)+ 路径计数机(数上DP)+ 排列计数机(线段树+二项式定理)

文章目录T1&#xff1a;复读数组题目题解代码实现T2&#xff1a;路径计数机题目题解代码实现T3&#xff1a;排列计数机题目题解CODET1&#xff1a;复读数组 题目 有一个长为nk的数组&#xff0c;它是由长为n的数组A1,A2,…,An重复k次得到的。 定义这个数组的一个区间的权值为…

微软携手 Docker 打造 CNAB,分布式应用来了!

微软中国MSDN 前天Microsoft Connect(); 2018发布的众多最新科技&#xff0c;都让全球开发者惊艳不已。其中一项最令开发者瞩目并迫不及待——微软联合Docker发布了云本地应用捆绑包&#xff08;Cloud Native Application Bundle&#xff0c;以下简称CNAB&#xff09;&#xff…

[C++]试一试结构体struct node的构造函数

可直接点击跳转到构造函数处结构体概念定义结构体定义结构体及结构体变量结构体变量的特点成员调用成员函数调用结构体的构造函数Upd1Upd2Upd3结构体概念 在实际问题中&#xff0c;一组数据往往具有不同的数据类型。 例如&#xff1a;人口大普查时&#xff0c;需要记录每一个人…

[多校联考-西南大学附中]切面包(线段树/概率与期望)+ Slow Path Finding Algorithm(拓扑排序/DP)+ 分数转化(数论)

文章目录T1&#xff1a;分数转换题目题解代码实现T2&#xff1a;Slow Path Finding Algorithm题目题解代码实现T3&#xff1a;切面包题目题解代码实现T1&#xff1a;分数转换 题目 Time limit: 1.5 seconds Memory limit: 512 megabytes 给定一个十进制小数&#xff0c;请你…

P3992 [BJOI2017]开车

P3992 [BJOI2017]开车 题意&#xff1a; 题解&#xff1a; 我们要先将问题转换 圈是车&#xff0c;x是加油站。红色部分为车移动的路线 数组a是车数量的前缀和 数组b是加油站的前缀和 而a[i]与b[i]的差的绝对值就是对应的红色路被走的次数 现在车发生位置移动&#xff0c;b数…

IdentityServer4-MVC+Hybrid实现Claims授权验证(四)

上节IdentityServer4-客户端的授权模式原理分析&#xff08;三&#xff09;以对话形式&#xff0c;大概说了几种客户端授权模式的原理&#xff0c;这节重点介绍Hybrid模式在MVC下的使用。且为实现IdentityServer4从数据库获取User进行验证&#xff0c;并对Claim进行权限设置打下…

漫谈何时从单体架构迁移到微服务?

面对微服务如火如荼的发展&#xff0c;很多人都在了解&#xff0c;学习希望能在自己的项目中帮得上忙&#xff0c;当你对微服务的庐山真面目有所了解后&#xff0c;接下来就是说服自己了&#xff0c;到底如何评估微服务&#xff0c;什么时候使用微服务&#xff0c;什么时间点最…

[CSP-S Day1,Day2 游记]提高组考后总结及学习编程C++以来的心得体会

怀着沉重而感慨的心情写下了这篇blog考试中暴露的问题Day1Day2综上解决方法学习历程及以来的心得体会职业精神这篇博客我可能会写好几天&#xff0c;我jio得这篇博客对我的学习历程以及态度产生深刻影响考试中暴露的问题 首先先说这次提高组考试的每道题所遇到的各种问题吧 Da…

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...

上篇文章介绍了基于Ids4密码授权模式&#xff0c;从使用场景、原理分析、自定义帐户体系集成完整的介绍了密码授权模式的内容&#xff0c;并最后给出了三个思考问题&#xff0c;本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的&#xff0c;如何验证access_t…

P5049 [NOIP2018 提高组] 旅行

P5049 [NOIP2018 提高组] 旅行 题意&#xff1a; 一棵树(可能是基环树)&#xff0c;从1出发&#xff0c;每到达一个新的点就记录下编号。求一种走法使得记录下来的编号字典序最小。 1≤n≤500000 mn−1 或 mn 题解&#xff1a; 如果不是基环树&#xff0c;那直接每次走字典…

[2019CSP-S Day1]提高组Day1题解(格雷码[模拟(k转二进制取反的做法带证明)] + 括号树[DP] + 树上的数(暴力+菊花图+单链))

Day1T1&#xff1a;格雷码题目题解代码实现T2&#xff1a;括号树题目题解代码实现T3&#xff1a;树上的数题目10pts暴力题解代码实现25pts菊花图题解代码实现25pts单链题解代码实现T1&#xff1a;格雷码 题目 通常&#xff0c;人们习惯将所有 n位二进制串按照字典序排列&…

使用PerfView监测.NET程序性能(四):折叠,过滤和时间范围选择

在上一篇文章使用PerfView监测.NET程序性能&#xff08;三&#xff09;&#xff1a;分组中&#xff0c;我们使用了Perfview的分组功能。分组功能旨在对某些函数按照某个格式进行分组&#xff0c;以减少视图中的各种无关函数的数量。但仅有分组还不够&#xff0c;有时我们想将一…

带旋treap概念及模板,带例题:普通平衡树

带旋Treap二叉查找树BST(Binary Search Tree)定义Treap定义模板合集&#xff08;均为O(logn)O(logn)O(logn)&#xff09;push_up模板旋转模板插入模板删除模板查找前驱模板查找后驱模板查找键值key模板查找节点的修正值rank模板PS&#xff1a;rd的比较问题例题&#xff1a;普通…