[省选联考 2020 A/B 卷] 冰火战士(树状数组上二分)

文章目录

  • problem
  • solution(10pts)
  • code(10pts)
  • solution(30pts)
  • code(30pts)
  • solution(60pts)
  • code(60pts)
  • solution(100pts)
  • code(100pts)

problem

luogu-P6619

一场比赛即将开始。

每位战士有两个属性:温度和能量。

有两派战士:

  • 冰系战士的技能会对周围造成降温冰冻伤害,因而要求场地温度不低于他的自身温度才能参赛;
  • 火系战士的技能会对周围造成升温灼烧伤害,因而要求场地温度不高于他的自身温度才能参赛。

当场地温度确定时,双方能够参赛的战士分别排成一队。

冰系战士按自身温度从低到高排序;火系战士按自身温度从高到低排序;温度相同时能量大的战士排在前面。

首先,双方的第一位战士之间展开战斗,两位战士消耗相同的能量,能量少的战士将耗尽能量退出比赛,而能量有剩余的战士将继续和对方的下一位战士战斗(能量都耗尽则双方下一位战士之间展开战斗)。

如此循环,直至某方战士队列为空,比赛结束。

你需要寻找最佳场地温度:使冰火双方消耗总能量最高的温度的最高值。

现在,比赛还处于报名阶段,目前还没有任何战士报名,接下来你将不断地收到报名信息和撤回信息。

其中,报名信息包含报名战士的派系和两个属性,撤回信息包含要撤回的报名信息的序号。

每当报名情况发生变化(即收到一条信息)时,你需要立即报出当前局面下的最佳场地温度,以及该场地温度下双方消耗的总能量之和是多少。

若当前局面下无论何种温度都无法开展比赛(某一方没有战士能参赛),则只要输出 Peace

solution(10pts)

  • Q≤100,x≤103Q\le 100,x\le 10^3Q100,x103

枚举整个信息读入过程,O(Q)O(Q)O(Q)

然后枚举答案温度,O(T)O(T)O(T)

再计算当前温度下报名的且可以参赛的冰系战士/火系战士的总能量,O(Q)O(Q)O(Q)

取所有温度下二者的较小值的最大值,输出其的两倍及记录的温度。

时间复杂度 O(Q2T)O(Q^2T)O(Q2T) ,其中 TTT 是所有战士的温度最大值。

可以获得 10′10'10 的普通成绩。

code(10pts)

namespace subtask1 {bool vis[105];void solve() {for( int i = 1, op, k, x, y;i <= Q;i ++ ) {scanf( "%d %d", &op, &k );if( op & 1 ) {scanf( "%d %d", &x, &y );g[i] = { k, x, y };vis[i] = 1;}else vis[k] = -1;int ans = 0, ti;for( int T = 1;T <= 1e3;T ++ ) {int ice = 0, fire = 0;for( int j = 1;j <= i;j ++ )if( vis[j] == 1 ) {if( g[j].k == 0 and g[j].x <= T ) ice += g[j].y;if( g[j].k == 1 and g[j].x >= T ) fire += g[j].y;}if( ans < min( ice, fire ) ) ans = min( ice, fire ), ti = T;else if( ans == min( ice, fire ) ) ti = max( ti, T );}if( ! ans ) puts( "Peace" );else printf( "%d %d\n", ti, ans << 1 );}}
}

solution(30pts)

  • Q≤104,x≤5000Q\le 10^4,x\le 5000Q104,x5000,不存在撤回信息,且输入的 xxx 按顺序不降。

每次枚举温度再枚举战士计算的原始暴力就不可行了。

关注特殊的两个性质:

  • 不存在撤回信息。

    我们原始暴力为什么要枚举战士,不仅仅是为了计算战士的能量、温度,更重要的是我们不知道当时某个战士是否已经撤回了报名信息。

    如果不撤回,我们就期望能找到一个数据结构或者什么工具来维护这些战士的能量和。

  • 输入的 xxx 按顺序不降。

    已知冰系战士的温度从小到大排序,火系战士的温度从大到小排序。

    所以每次加入战士,如果是冰系就排在冰系队伍的最后面;如果是火系就排在火系队伍的最前面。

    我们可以用两个数组来模拟这个过程,用指针移动即可。

    且当两个战士同派系且温度一样的话,就没有什么区别了,所以直接合并成一个战士。

最后考虑计算答案。

从高到低枚举参与比赛的温度最低的火系战士,即当时的场地温度。(证明见满分题解)

则冰系战士能参与比赛的一定对应的是其队伍的一段前缀。

而随着枚举的火系战士温度降低,冰系战士能参加比赛的数量也在减少。

所有可以用指针枚举能参与比赛的温度最高的冰系战士。

时间复杂度 O(Q2)O(Q^2)O(Q2)。结合前一档,可以获得 30′30'30 的不错成绩。

code(30pts)

namespace subtask1 {}
namespace subtask2 {pair < int, int > ice[10005], fire[10005];void solve() {int p0 = 0, p1 = Q + 1, sum_ice = 0;for( int i = 1, op, k, x, y;i <= Q;i ++ ) {scanf( "%d %d %d %d", &op, &k, &x, &y );if( k == 0 ) {sum_ice += y;if( p0 and ice[p0].first == x ) ice[p0].second += y;else ice[++ p0] = make_pair( x, y );}else {if( p1 <= Q and fire[p1].first == x ) fire[p1].second += y;else fire[-- p1] = make_pair( x, y );}int p = p0, Sice = sum_ice, Sfire = 0, ans = 0, ti;for( int j = p1;j <= Q;j ++ ) {int T = fire[j].first; Sfire += fire[j].second;while( T < ice[p].first ) Sice -= ice[p --].second;if( ans < min( Sice, Sfire ) ) ans = min( Sice, Sfire ), ti = T;if( ans == min( Sice, Sfire ) ) ti = max( ti, T );}if( ! ans ) puts("Peace");else printf( "%d %d\n", ti, ans << 1 );}}
}

solution(60pts)

  • Q≤2e5,x≤2e5Q\le 2e5,x\le 2e5Q2e5,x2e5

再次注意到,冰系战士是按温度从低到高,火系战士是按温度从高到低。

即冰系战士不降,火系战士不升。

而冰系战士参加比赛人数越多(前缀取得越多),火系战士就越少;反之火系越多,冰系越少。

所以我们大胆猜测可以三分?快速求前缀能量和,利用树状数组/线段树均可。

实测写了后,很遗憾,消耗总能量最高都求不对。输出中间三分点,发现存在平台。

仔细想想,确实很容易就出现平台,因为战士的温度是离散的。

平台三分不行。我们考虑二分。

如果火系战士的总能量更大,就再升高一下场次温度;反之降温。(这其实是正解的做差后的二分思想了)

写了后,又哭又笑,消耗总能量最高求对了。但是场次温度并不是最大值。

同样是因为温度的离散问题。

但是我们肯定温度一定是某个战士的自身温度。

所以直接暴力一点,去找比记录温度高的战士温度,然后计算答案是否和总能量一样,一样就记录这个温度为场地温度,继续找;知道总能量消耗小于答案为止。

所以还要用个 set\text{set}set 来记录所有报名的战士的温度。

时间复杂度 O(Qlog⁡2T)O(Q\log^2 T)O(Qlog2T)(因为那个暴力也跳不了多少次,复杂度前面最多乘个几的常数)。

结合前两档的部分,可以获得 60′60'60 的优秀成绩。

code(60pts)

namespace subtask1 {}
namespace subtask2 {}
namespace subtask3 {#define maxn 200005#define lson now << 1#define rson now << 1 | 1#define mid  (l + r >> 1)set < pair < int, int > > val;namespace ice {int sum[maxn << 2];void modify( int p, int x, int now = 1, int l = 1, int r = 2e5 ) {if( l == r ) { sum[now] += x; return; }if( p <= mid ) modify( p, x, lson, l, mid );else modify( p, x, rson, mid + 1, r );sum[now] = sum[lson] + sum[rson];}int query( int L, int R, int now = 1, int l = 1, int r = 2e5 ) {if( R < l or r < L ) return 0;if( L <= l and r <= R ) return sum[now];return query( L, R, lson, l, mid ) + query( L, R, rson, mid + 1, r );}}namespace fire {int sum[maxn << 2];void modify( int p, int x, int now = 1, int l = 1, int r = 2e5 ) {if( l == r ) { sum[now] += x; return; }if( p <= mid ) modify( p, x, lson, l, mid );else modify( p, x, rson, mid + 1, r );sum[now] = sum[lson] + sum[rson];}int query( int L, int R, int now = 1, int l = 1, int r = 2e5 ) {if( R < l or r < L ) return 0;if( L <= l and r <= R ) return sum[now];return query( L, R, lson, l, mid ) + query( L, R, rson, mid + 1, r );}}int find( int x, int ans ) {while( 1 ) {auto it = val.upper_bound( make_pair( x, Q ) );if( it == val.end() ) return x;int sum1 = fire :: query( it->first, 2e5 );int sum2 = ice :: query( 1, it->first );if( ans > min( sum1, sum2 ) ) return x;else x = it->first;}}void solve() {int Min = 1e9, Max = -1e9;for( int i = 1, op, k, x, y;i <= Q;i ++ ) {scanf( "%d %d", &op, &k );if( op & 1 ) {scanf( "%d %d", &x, &y );val.insert( make_pair( x, i ) );Min = min( Min, x );Max = max( Max, x );g[i] = { k, x, y };if( k == 0 ) ice :: modify( x, y );else fire :: modify( x, y );}else {val.erase( make_pair( g[k].x, k ) );if( g[k].k == 0 ) ice :: modify( g[k].x, - g[k].y );else fire :: modify( g[k].x, - g[k].y );}int l = 1, r = 2e5;int ans = 0, ti;while( l <= r ) {int sum1 = fire :: query( mid, 2e5 );int sum2 = ice :: query( 1, mid );if( ans < min( sum1, sum2 ) ) ans = min( sum1, sum2 ), ti = mid;else if( ans == min( sum1, sum2 ) ) ti = mid;if( sum1 >= sum2 ) l = mid + 1;else r = mid - 1;}if( ! ans ) puts("Peace");else printf( "%d %d\n", find( ti, ans ), ans << 1 );}}
}

solution(100pts)

  • Q≤2e6,1≤x≤2e9Q\le 2e6,1\le x\le 2e9Q2e6,1x2e9

observation1:\text{observation1}:observation1: 冰系战士排列后温度成不降函数;火系战士排列后温度成不升函数。

observation2:\text{observation2}:observation2: 最后的场地温度一定是某个战士的体温。

  • 证明:显然。感性感知一下。

    如果最后的场地温度不是某个战士的温度。

    那么这个场地温度一定 <<< 参与比赛的火系战士的最低温度,>>> 参与比赛的冰系战士的最高温度。

    这个场地温度就可以被调整为 === 参与比赛的火系战士的最低温度。

    这样火系和冰系战士原本能参与比赛的没有变化,说不定还可以新增几名参与比赛的冰系战士。

    温度拉高,总消耗也没有变劣。

基于这个结论,我们可以将战士的温度离散化成和 QQQ 同量级。

假设场地温度为 TTT,能参加比赛的冰系战士的能量和为 I(T)\text{I}(T)I(T),能参加比赛的火系战士的能量和为 F(T)\text{F}(T)F(T)

勾勒成函数后,一个单增(火),一个单减(冰)。答案肯定是在交点处。

在这里插入图片描述

而我们真正要二分的应该两函数合并取较小值的函数。

在这里插入图片描述

更详细地,我们记 Ice(i):\text{Ice}(i):Ice(i): 自身温度 ≤i\le ii 的冰系战士的能量和,记 Fire(i):\text{Fire}(i):Fire(i): 自身温度 ≤i\le ii 的火系战士的能量和,记当前报名的所有火系战士的能量和为 sumsumsum

则当场地温度为 TTT 的时候,答案即为 min⁡(Ice(T),sum−Fire(T−1))\min\Big(\text{Ice}(T),sum-\text{Fire}(T-1)\Big)min(Ice(T),sumFire(T1)) 再乘 222

我们二分的函数应该是两个前缀和函数做差:G(T)=Ice(T)−(sum−Fire(T−1))G(T)=\text{Ice}(T)-(sum-\text{Fire}(T-1))G(T)=Ice(T)(sumFire(T1))。(与上图不太一样,反转了火系函数)

因为 Ice(T)\text{Ice}(T)Ice(T) 函数不降,sum−(Fire(T−1))sum-(\text{Fire}(T-1))sum(Fire(T1)) 函数不升,所以 G(T)G(T)G(T) 函数非严格不降。

那么交点必定在最后一个 ≤0\le 00 和第一个 >0>0>0 的位置之间。

所以我们二分最后一个使得 G(T)≤0G(T)\le 0G(T)0 的位置 ttt,答案必定在 t/t+1t/t+1t/t+1 处取得。

如果在 ttt 处答案更大,则温度自然就是 ttt

否则还要在函数平台处二分出最大的温度 t0t_0t0,满足 Ice(t+1)−(sum−Fire(t))=Ice(t0)−(sum−Fire(t0−1))⇒Fire(t)≥Fire(t0−1)\text{Ice}(t+1)-(sum-\text{Fire}(t))=\text{Ice}(t_0)-(sum-\text{Fire}(t_0-1))\Rightarrow \text{Fire}(t)\ge \text{Fire}(t_0-1)Ice(t+1)(sumFire(t))=Ice(t0)(sumFire(t01))Fire(t)Fire(t01)

但肯定不能二分后树状数组查询,这样跟 60′60'60 的做法是一样的。(推导过程严谨了一些而已,但谁管这个呢?》》

这里我们要用到 树状数组上二分,与线段树上二分类似,是 O(nlog⁡n)O(n\log n)O(nlogn) 的。

为什么不用线段树二分,是因为这位虽然看似一个 log⁡\loglog 但是跑出来因为常数问题,跟二分后树状数组差不多。

  • 树状数组二分。

这需要改写一下上面函数的形式:

fire(i):fire(i):fire(i): 温度为 iii 的火系战士的能量和。

  • Ice(T)−(sum−Fire(T−1))≤0⇒Ice(T)+Fire(T)−fire(T)≤sum\text{Ice}(T)-(sum-\text{Fire}(T-1))\le 0\Rightarrow \text{Ice(T)}+\text{Fire}(T)-fire(T)\le sumIce(T)(sumFire(T1))0Ice(T)+Fire(T)fire(T)sum

    这样下标只有 TTT 且具有单调性,可以树状数组二分了。

  • Fire(T)−fire(T)≤sum−ans\text{Fire}(T)-fire(T)\le sum-ansFire(T)fire(T)sumans

时间复杂度 O(Qlog⁡Q)O(Q\log Q)O(QlogQ),可以获得 100′100'100 的好成绩。

code(100pts)

#include <bits/stdc++.h>
using namespace std;
#define maxn 2000005 
int val[maxn], fire[maxn];
int Q, n, cnt_fire, sum_fire, cnt_ice;
struct node { int op, k, x, y; }q[maxn];
struct BIT {int sum[maxn];void modify( int i, int x ) {for( ;i <= n;i += i & -i ) sum[i] += x;}int query( int i ) {int ans = 0;for( ;i;i -= i & -i ) ans += sum[i];return ans;}
}Fire, Ice;int calc( int x ) {return min( Ice.query( x ), sum_fire - Fire.query( x - 1 ) );
}int main() {scanf( "%d", &Q );for( int i = 1;i <= Q;i ++ ) {scanf( "%d %d", &q[i].op, &q[i].k );if( q[i].op & 1 ) scanf( "%d %d", &q[i].x, &q[i].y ), val[++ n] = q[i].x;}sort( val + 1, val + n + 1 );n = unique( val + 1, val + n + 1 ) - val - 1;for( int i = 1;i <= Q;i ++ )if( q[i].op & 1 ) q[i].x = lower_bound( val + 1, val + n + 1, q[i].x ) - val;for( int t = 1;t <= Q;t ++ ) {int k = q[t].k, x, y;if( q[t].op & 1 ) {x = q[t].x, y = q[t].y;if( k == 0 ) Ice.modify( x, y ), cnt_ice ++;else Fire.modify( x, y ), cnt_fire ++, sum_fire += y, fire[x] += y;	}else {x = q[k].x, y = q[k].y;if( q[k].k == 0 ) Ice.modify( x, -y ), cnt_ice --;else Fire.modify( x, -y ), cnt_fire --, sum_fire -= y, fire[x] -= y;}int p = 0, ans = 0;for( int i = 20;~ i;i -- ) {k = p | (1 << i);if( k <= n and ans + Ice.sum[k] + Fire.sum[k] - fire[k] <= sum_fire )p |= (1 << i), ans += Ice.sum[k] + Fire.sum[k];}int ans1 = calc( p ), ans2 = calc( p + 1 );if( max( ans1, ans2 ) <= 0 ) { puts("Peace"); continue; }if( ans1 > ans2 ) { printf( "%d %d\n", val[p], ans1 << 1 ); continue; }p = 0, ans = 0;for( int i = 20;~ i;i -- ) {k = p | (1 << i);if( k <= n and ans + Fire.sum[k] - fire[k] <= sum_fire - ans2 )p |= (1 << i), ans += Fire.sum[k];/*ans2说明火系战士的能量和更小二分平台上的最大温度t0在前缀和Fire数组中以T为自变量呈一个平台满足 Fire(t)>=Fire(t0-1)即 sum-Fire(t)<=sum-Fire(t0-1)*/}printf( "%d %d\n", val[p], ans2 << 1 );}return 0;
}

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

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

相关文章

P1829 [国家集训队]Crash的数字表格 / JZPTAB

P1829 [国家集训队]Crash的数字表格 / JZPTAB 题意&#xff1a; 求∑i1n∑j1mlcm(i,j)\sum_{i1}^{n}\sum_{j1}^{m}lcm(i,j)∑i1n​∑j1m​lcm(i,j) 1<n<m<1e7 结果mod20101009 题解&#xff1a; 跟这个题P3911 最小公倍数之和很相近&#xff0c;但是本题数据范围大…

C# 跨设备前后端开发探索

每个人都拥有 好奇心&#xff0c;好奇心驱使着我们总是去尝试做一些有趣的事情。带起你的好奇心&#xff0c;本文将使用 C# 开发各种各样好玩的东西。每个人都拥有 好奇心&#xff0c;好奇心驱使着我们总是去尝试做一些有趣的事情。比如这件事&#xff1a;在好奇心的驱使下&…

Docker最全教程之Python爬网实战(二十二)

Python目前是流行度增长最快的主流编程语言&#xff0c;也是第二大最受开发者喜爱的语言&#xff08;参考Stack Overflow 2019开发者调查报告发布&#xff09;。笔者建议.NET、Java开发人员可以将Python发展为第二语言&#xff0c;一方面Python在某些领域确实非常犀利&#xff…

P2870 [USACO07DEC]Best Cow Line G

P2870 [USACO07DEC]Best Cow Line G 题意&#xff1a; 给你一个字符串&#xff0c;每次从首或尾取一个字符组成字符串&#xff0c;问所有能够组成的字符串中字典序最小的一个。 题解&#xff1a; 现在要组成字典序最小的&#xff0c;那我们每次就尽可能取小的 我们从两端开…

中间件是什么?在.NET Core中的工作原理又是怎样的呢?

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;ASP.NET Core appsettings.json文件ASP.NET Core 中的中间件(Middleware)在这个视频中&#xff0c;我们将了解&#xff0c;ASP.NET Core 中的中间件是 什么&#xff1f;中间件很重要&#xff0c;尤其是在你想当架构…

从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行

本文描述的是对国家统计局于2019-01-31发布的《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》中省市区三级的坐标和行政区域边界的采集。本文更新&#xff08;移步查阅&#xff09;&#xff1a;19-04-15 新采集了2018的省市区三级的坐标和行政区域边界数据csv格式…

Display Substring

Display Substring 题意&#xff1a; 一个长度为n的字符串&#xff0c;每个字符有自己的价值&#xff0c;求第k小价值的不重复子串价值 题解&#xff1a; 首先众所周知&#xff0c;所有子串都可以用后缀的前缀来表示&#xff0c;这就和后缀数组扯上关系了 我们可以直接二分…

使用 DotNet CLI 创建自定义的 WPF 项目模板

描述当我们安装完 DotNetCore 3.0 版本的 SDK 后&#xff0c;我们就可以创建基于 DotNetCore 的 WPF 项目模板&#xff0c;通过如下 CLI 可以方便快捷的创建并运行我们的项目&#xff1a;Copydotnet new wpf -n WpfAppcd WpfAppdotnet restoredotnet run做过 WPF 开发的朋友都知…

[翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志

一步一步指导您使用 ElasticSearch, Kibana, ASP.NET Core 2.1 和 Docker 来记录日志在本教程中&#xff0c;我将向您展示如何启动和运行 ElasticSearch&#xff0c;Kibana 和 ASP.NET Core 2.1在开始之前&#xff0c;让我们来看看 ElasticSearch&#xff0c;Kibana 和 Serilog…

【学习笔记】WQS二分详解及常见理解误区解释

文章目录应用分析算法分析WQS二分精髓的两点细节&#xff08;博客重点&#xff01;&#xff09;真题分析[国家集训队]Tree Ⅰ忘情星际广播网上很多博客写得模模糊糊的&#xff0c;对我这个新手可是一点都不友好。 昨天一天都在研究这个东西&#xff0c;分享一下自己的拙见。 百…

ASP.NET Core中HTTP管道和中间件的二三事

本文出自《从零开始学ASP.NET CORE MVC》推荐文章&#xff1a;中间件是什么&#xff1f;在.NET Core中的工作原理又是怎样的呢&#xff1f;配置ASP.NET Core请求(Request)处理管道在本视频中&#xff0c;我们将讨论使用中间件组件为asp.net core 应用程序配置请求处理管道。作为…

.Net Core Razor 预编译,动态编译,混合编译

预编译预编译是ASP .Net Core的默认方式。在发布时&#xff0c;默认会将系统中的所有Razor视图进行预编译。编译好的视图DLL统一命名为 xxx.PrecompiledViews.dll 或者 xxx.Views.dll动态编译将项目整个配置成动态编译很简单&#xff0c;添加一个配置项目MvcRazorCompileOnPubl…

一张图来看看.NETCore和前后端技术的演进之路

一张图2019年3月10日&#xff0c;在长沙.NET 技术社区组织的技术沙龙《.NET Core和前后端分离那些事儿》上&#xff0c;我们曾经试图通过一系列抽丝剥茧的过程来引导大家在这条基于.NET Core的前后端分离有关的技术路线上持续发散&#xff0c;由于各种原因未能成功&#xff0c;…

【学习笔记】我命由天不由我之随机化庇佑 —— 爬山法 和 模拟退火法

以下均假设最优解是在最低点。 爬山法 爬山算法是一种局部择优的方法&#xff0c;采用启发式方法&#xff0c;是对深度优先搜索的一种改进&#xff0c;它利用反馈信息帮助生成解的决策。 直白地讲&#xff0c;就是当目前无法直接到达最优解&#xff0c;但是可以判断两个解哪…

Strange Memory Gym - 102832F

Strange Memory Gym - 102832F 题意&#xff1a; 有一颗n个节点的树&#xff0c;求下面公式的值&#xff1a; 题解&#xff1a; a ⊕ b c 可以推出a ⊕ c b 那么ai⊕ajalca(i,j)a_{lca(i,j)}alca(i,j)​,可以得到&#xff1a;ai⊕alca(i,j)a_{lca(i,j)}alca(i,j)​aj,ai就…

.net core 使用RSA获取私钥证书并签名

以前我们使用RSA加密主要是使用RSACryptoServiceProvider这个类&#xff0c;在.NET Core中也有这个类&#xff0c;但是这个类并不支持跨平台&#xff0c;所以如果你是用这个类来进行加/解密在windows上运行是完全没有错误的&#xff0c;但是只要你一放到Linux下就会出现异常。查…

CDN流量调度问题(2021CCPC华为云挑战赛)

CDN流量调度问题 题意&#xff1a; 有n个线路&#xff0c;每个线路的任务量为a[i],初始状态下&#xff0c;每个线路起初只有一个节点&#xff0c;每个线路完成任务所需时间为 现在你要给每个线路增加节点&#xff0c;所有增加的节点总数不超过m&#xff0c;第i个线路增加节点…

.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

.NET Core 3.0 Preview 3已经推出&#xff0c;它包含了一系列关于ASP.NET Core的新的更新。下面是该预览版的更新列表&#xff1a;Razor组件改进:单项目模板 新的Razer扩展Endpoint路由集成预呈现Razor类库中的Razor组件改进事件处理 Forms & validation运行时编译Worker服…

世界五星级大厨经典菜品集

本blog只是记录C学习以来掉过的一些坑&#xff0c;写下来防止自己下一次再犯&#xff0c;顺便分享 持续更新&#xff0c;到死为止菜品特套1&#xff1a;vector.size() ~ 的使用菜品特套2&#xff1a;if-else的缩进菜品特套3&#xff1a;int范围边界的1ll使用菜品特套4&#xff…

ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

关心最多的问题&#xff0c;不FQ能不能用&#xff0c;答案是能。Google官方提供额外的域名来提供服务&#xff0c;国内可以正常使用。一. 前言验证码在我们实际的生活场景中非常常见&#xff0c;可以防止恶意破解密码、刷票、论坛灌水、刷注册等等。现在的网站基本都有使用验证…