周末狂欢赛2(冒泡排序,概率充电器,不勤劳的图书管理员)

狂欢2

  • T1:冒泡排序
    • 题目
    • 题解
    • CODE
  • T2:概率充电器
    • 题目
    • 题解
    • CODE
  • T3:不勤劳的图书管理员
    • 题目
    • 题解
    • CODE

我不这么认为。。。。

T1:冒泡排序

题目

下面是一段实现冒泡排序算法的 C++代码:

for(int i=1; i<n; i++)for(int j=1; j<=n-i; j++)if(a[j]>a[j+1])swap(a[j],a[j+1]);

其中待排序的a数组是一个1,2…n的排列,swap 函数将交换数组中对应位置的值。
对于给定的数组 a 以及给定的非负整数k ,使用这段代码执行了正好k次 swap 操作之后数组 a 中元素的值会是什么样的呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题解

首先我们要了解冒泡排序的原理,举个例子

3421

首先3会与4进行比较,不交换
接着4与2比较,交换
4往后移了一位,j下标也+1,所以j还是映射的是4,与1比较交换

外层第一轮i循环后的结果如下

3214

3与2比较,交换
j+1,3也右移了一位,j仍映射着3,与1比较交换
接着与4比较,小于4中断,把接力棒给4,4是最后一位停止交换

外层第二轮i循环后的结果如下

2134

接下来,让我们用理论来推导这个过程的一些规律
1.外层循环在第i次结束后,对应的第i大的数就会出现在自己应该在的位置,并且[n−i+1,n][n-i+1,n][ni+1,n]这一区间是严格不下降序列(此题中是严格上升),👉每一次交换是成单调不下降的
换言之,即x会一直与右边交换直到遇到一个比x大的y,然后x停下,y又与右边交换直到遇到与x相似的情况…

2.对于每一个x,最多只会发生一次左移,因为它只会有一次与左边的数进行比较,但是对于一个x可能发生多次右移,但x发生多少次右移就代表着有多少个数发生了左移,👉对于x,它左移的次数为左边比它大的数的个数,因为那些比它大的数必须要越过x才能到达自己应该在的位置
最后如果x左边没有比它大的数后,它就会固定在这个位置,因为没有数会越过它了

3.我们只考虑x左边比它大的数,因为如果x要右移的话就意味着有其他的数会左移,把其他数左移后留下来的位置就是x的位置啦!
在这里插入图片描述


考虑用树状数组去求[1,i−1][1,i-1][1,i1]区间比a[i]a[i]a[i]大的个数
然后用二分去枚举外层循环的i,看能最多跑满多少次外层循环
剩下的就是跑不满的,那我们就暴力转移一次即可

CODE

#include <queue>
#include <cstdio>
#include <iostream>
using namespace std;
#define LL long long
#define MAXN 1000005
priority_queue < int > q;
int n, ans;
int a[MAXN], result[MAXN];
LL k;
int maxx[MAXN], tree[MAXN];int lowbit ( int x ) {return x & ( -x );
}LL query ( int x ) {LL tot = 0;for ( int i = x;i >= 1;i -= lowbit ( i ) )tot += tree[i];return tot;	
}void add ( int x ) {for ( int i = x;i <= n;i += lowbit ( i ) )tree[i] ++;
}LL check ( int x ) {LL tot = 0;for ( int i = 1;i <= n;i ++ )tot += min ( x, maxx[i] );return tot;
}void solve ( int l, int r ) {if ( l > r )return;int mid = ( l + r ) >> 1;if ( check ( mid ) <= k ) {ans = mid;solve ( mid + 1, r );}elsesolve ( l, mid - 1 );
}int main() {scanf ( "%d %lld", &n, &k );for ( int i = 1;i <= n;i ++ ) {scanf ( "%d", &a[i] );maxx[i] = query ( n ) - query ( a[i] );add ( a[i] );}LL sum = 0;for ( int i = 1;i <= n;i ++ )sum += maxx[i];if ( sum < k )return ! printf ( "Impossible!" );solve ( 1, n - 1 );for ( int i = 1;i <= n;i ++ )if ( maxx[i] >= ans )result[i - ans] = a[i];elseq.push ( a[i] );for ( int i = n;i >= 1;i -- )if ( ! result[i] ) {result[i] = q.top();q.pop();if ( q.empty() )break;}k -= check ( ans );for ( int i = 1;i < n;i ++ )if ( result[i] > result[i + 1] ) {if ( ! k )break;swap ( result[i], result[i + 1] );k --;}for ( int i = 1;i <= n;i ++ )printf ( "%d ", result[i] );return 0;
} 

T2:概率充电器

题目

Luogu走一波
著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品—— 概率充电器:
“采用全新纳米级加工技术,实现元件与导线能否通电完全由真随机数决 定!SHOI 概率充电器,您生活不可或缺的必需品!能充上电吗?现在就试试看 吧!”

SHOI 概率充电器由n-1 条导线连通了n 个充电元件。进行充电时,每条导 线是否可以导电以概率决定,每一个充电元件自身是否直接进行充电也由概率 决定。随后电能可以从直接充电的元件经过通电的导线使得其他充电元件进行 间接充电。

作为SHOI 公司的忠实客户,你无法抑制自己购买SHOI 产品的冲动。在排 了一个星期的长队之后终于入手了最新型号的SHOI 概率充电器。你迫不及待 地将SHOI 概率充电器插入电源——这时你突然想知道,进入充电状态的元件 个数的期望是多少呢?

输入格式
第一行一个整数:n概率充电器的充电元件个数。充电元件由1-n 编号。
之后的n-1 行每行三个整数a, b, p,描述了一根导线连接了编号为a 和b 的 充电元件,通电概率为p%。
第n+2 行n 个整数:qi。表示i 号元件直接充电的概率为qi%。

输出格式
输出一行一个实数,为能进入充电状态的元件个数的期望,四舍五入到小 数点后6 位小数。

输入输出样例
输入
3
1 2 50
1 3 50
50 0 0
输出
1.000000

输入
5
1 2 90
1 3 80
1 4 70
1 5 60
100 10 20 30 40
输出
4.300000
说明/提示
对于30%的数据,n≤5000
对于100%的数据,n≤500000,0≤p,qi≤100

题解

又是期望,哎😔,先引入一些关于概率的计算,我用通俗易懂的文字帮助大家理解,不用去搞那么死板的事件我不会告诉你因为我也不是很清楚

事件A与事件B同时发生的概率=事件A发生的概率*事件B发生的概率
事件A和事件B只其中一件发生的概率=事件A发生的概率+事件B发生的概率-事件AB同时发生的概率
(可以不用看, 反正下面我不用)

在这里插入图片描述


dp[u]dp[u]dp[u]表示uuu号充电器亮的期望
那么我们思考转移方程式,如果uuu要亮,只需要任意一个儿子或者父亲给它供电,所以uuu点亮的期望等于自己本身亮加上父亲点亮加上任何一个儿子点亮的概率和,即
dp[u]=∏(v∈son[u])dp[v]∗pu,v+q[u]+dp[fa]∗pu,fadp[u]=\prod(v∈son[u])dp[v]*p_{u,v} +q[u]+dp[fa]*p_{u,fa}dp[u]=(vson[u])dp[v]pu,v+q[u]+dp[fa]pu,fa

但是这么想,其实是错误的,因为这个转移方程式的前提是fafafauuu的这一条充电线是好的,但是当我们用uuu在往上去转移fafafa的时候,又不能保证这一条充电线是好的,并且这个转移方程式中各个儿子间会重复,可能同时多个儿子供电的事件发生


因此我们反着来,设dp[u]dp[u]dp[u]表示uuu号充电器不亮的期望
在这里插入图片描述
那么转移方程式也是类似的,如果uuu不亮,要所有儿子和父亲都不给它供电,又有父亲,算了我们先不管父亲,重新定义dp[u]dp[u]dp[u]表示uuu号充电器不亮的期望,且只考虑u的儿子不给它供电导致的
dp[u]=∏(v∈son[u])(1−(1−dp[v])∗pu,v)∗(1−q[u])dp[u]=\prod(v∈son[u])(1-(1-dp[v])*p_{u,v})*(1-q[u])dp[u]=(vson[u])(1(1dp[v])pu,v)(1q[u])

分条来理解含义,(1−dp[v])(1-dp[v])(1dp[v])儿子vvv亮的概率,pu,vp_{u,v}pu,v这条充电线是好的,相乘就是儿子vvvuuu供电的概率,再用1−()1-()1()表示儿子不供电的概率,

为什么是相乘呢?因为所有儿子都不给它供电才能使得uuu不亮,所以这个事件是要同时发生的,并且要建立在uuu本身不亮的基础上,所以是相乘,结果还是用到了之前的铺垫打脸了
在这里插入图片描述


接下来我们必须去面对父亲了,设f[u]f[u]f[u]表示uuu号充电器不亮的概率且是只考虑父亲不给它供电导致的
我们知道父子关系是相互的,uuufafafa的一个儿子,相反fafafa也是uuu的唯一父亲,
所以dp[fa]dp[fa]dp[fa]的更新会有uuu的参与,那么我们现在又是考虑fafafauuu供电,
就必须把uuufafafa供电的概率给去掉,
fafafauuu供电的概率且不考虑uuu,是由fafafa的父亲或者fafafa的其它儿子供应的
转移方程式就出来了:
f[u]=1−(1−(dp[fa]∗f[fa]/(1−(1−dp[u])∗faw)))∗fawf[u]=1 - ( 1 - ( dp[fa] * f[fa] / ( 1 - ( 1 - dp[u] ) * fa_w ) ) ) * fa_wf[u]=1(1(dp[fa]f[fa]/(1(1dp[u])faw)))faw

再分条理解:
dp[fa]∗f[fa]dp[fa] * f[fa]dp[fa]f[fa]则是父亲不亮的期望(包含有父亲的父亲和父亲的其他儿子给父亲供电的两种情况)
(dp[fa]∗f[fa]/(1−(1−dp[u])∗faw)( dp[fa] * f[fa] / ( 1 - ( 1 - dp[u] ) * fa_w )(dp[fa]f[fa]/(1(1dp[u])faw)则是排除掉uuufafafa供电的概率
1−(dp[fa]∗f[fa]/(1−(1−dp[u])∗faw))1-( dp[fa] * f[fa] / ( 1 - ( 1 - dp[u] ) * fa_w ) )1(dp[fa]f[fa]/(1(1dp[u])faw))则是表示fafafa亮的期望,排除掉uuu供电使父亲亮起来的概率
(1−(dp[fa]∗f[fa]/(1−(1−dp[u])∗faw)))∗faw( 1 - ( dp[fa] * f[fa] / ( 1 - ( 1 - dp[u] ) * fa_w ) ) ) * fa_w(1(dp[fa]f[fa]/(1(1dp[u])faw)))faw表示fafafauuu相连的充电线是好的,相乘则表示父亲让uuu亮的概率
最后减掉就是不亮的概率了
在这里插入图片描述


最后把f[u]f[u]f[u]dp[u]dp[u]dp[u]相乘就表示没有任何一个亲戚能给该点供电,就是不亮的期望,最后把每个点用
1-不亮期望加起来就是亮起来的期望即答案
精度问题就定义一个极小值即可。。。

CODE

#include <cmath>
#include <cstdio>
#include <vector>
using namespace std;
const int eps = 1e-8;
#define MAXN 1000005
struct node {int v;double w;node ( int V, double W ) {v = V;w = W;}
};
vector < node > G[MAXN];
int n;
double result;
double dp[MAXN], f[MAXN];void dfs1 ( int u, int fa ) {f[u] = 1;dp[u] = 1 - dp[u];for ( int i = 0;i < G[u].size();i ++ ) {int v = G[u][i].v;double w = G[u][i].w;if ( v == fa )continue;dfs1 ( v, u );dp[u] *= ( 1 - ( 1 - dp[v] ) * w );}
}void dfs2 ( int u, int fa, double fa_w ) {if ( fabs ( 1 - ( 1 - dp[u] ) * fa_w ) > eps ) //维护精度 f[u] = 1 - ( 1 - ( dp[fa] * f[fa] / ( 1 - ( 1 - dp[u] ) * fa_w ) ) ) * fa_w;elsef[u] = 1 - fa_w;result -= dp[u] * f[u];for ( int i = 0;i < G[u].size();i ++ ) {int v = G[u][i].v;if ( v == fa )continue;dfs2 ( v, u, G[u][i].w );}
}
int main() {scanf ( "%d", &n );for ( int i = 1;i < n;i ++ ) {int a, b;double w;scanf ( "%d %d %lf", &a, &b, &w );G[a].push_back( node ( b, w / 100 ) );G[b].push_back( node ( a, w / 100 ) );}for ( int i = 1;i <= n;i ++ ) {scanf ( "%lf", &dp[i] );dp[i] /= 100;}result = n;dfs1 ( 1, 0 );dfs2 ( 1, 0, 0 );printf ( "%.6f", result );return 0;
}

T3:不勤劳的图书管理员

题目

luogu链接
加里敦大学有个帝国图书馆,小豆是图书馆阅览室的一个书籍管理员。他的任务是把书排成有序的,所以无序的书让他产生厌烦,两本乱序的书会让小豆产生这两本书页数的和的厌烦度。现在有n本被打乱顺序的书,在接下来m天中每天都会因为读者的阅览导致书籍顺序改变位置。因为小豆被要求在接下来的m天中至少要整理一次图书。小豆想知道,如果他前i天不去整理,第i天他的厌烦度是多少,这样他好选择厌烦度最小的那天去整理。

输入格式
第一行会有两个数,n,m分别表示有n本书,m天
接下来n行,每行两个数,ai和vi,分别表示第i本书本来应该放在ai的位置,这本书有vi页,保证不会有放置同一个位置的书
接下来m行,每行两个数,xj和yj,表示在第j天的第xj本书会和第yj本书会因为读者阅读交换位置

输出格式
一共m行,每行一个数,第i行表示前i天不去整理,第i天小豆的厌烦度,因为这个数可能很大,所以将结果模10^9 +7后输出

输入输出样例
输入
5 5
1 1
2 2
3 3
4 4
5 5
1 5
1 5
2 4
5 3
1 3
输出
42
0
18
28
48
说明/提示
对于20%的数据,1 ≤ ai; xj; yj ≤ n ≤ 5000, m ≤ 5000, vi ≤ 10^5
对于100%的数据,1 ≤ ai; xj; yj ≤ n ≤ 50000, m ≤ 50000, vi ≤ 10^5

题解

这道题与动态逆序对是类似的,也是一道树套树板题
lllrrr的交换只会影响[l+1,r−1][l+1,r-1][l+1,r1]区间,lllrrr我们单独判断
1.原本xxx的优先级比lll小的在交换后会与lll形成逆序对,厌烦度则是这些xxx的页数和加上满足条件的xxx的个数乘以lll的页数
2.原本xxx的优先级比lll大的在交换后会与lll不再形成逆序对,要减去它的厌烦度,厌烦度则是这些xxx的页数和加上满足条件的xxx的个数乘以lll的页数
3.原本xxx的优先级比rrr小的在交换后会与rrr形成逆序对,厌烦度则是这些xxx的页数和加上满足条件的xxx的个数乘以rrr的页数
4.原本xxx的优先级比rrr大的在交换后会与rrr不再形成逆序对,减去厌烦度,厌烦度则是这些xxx的页数和加上满足条件的xxx的个数乘以rrr的页数

因为线段树套平衡树和线段树套权值线段树都要T,所以我被迫选择树状数组套线段树
在这里插入图片描述

CODE

#include <cstdio>
#include <iostream>
using namespace std;
#define LL long long
#define mod 1000000007
#define MAXN 500005
struct node {int l, r;LL v, cnt;
}tree[MAXN * 100];
int n, m, Size;
int root[MAXN * 100];
//注意开log级或者大一点,不然就会TLE/RE 
LL ans;
LL a[MAXN], v[MAXN];
/*内层线段树*/ 
void modify ( int &t, int l, int r, int id, LL w1, LL w2 ) {if ( ! t )t = ++ Size;tree[t].v = ( tree[t].v + w1 ) % mod;tree[t].cnt = ( tree[t].cnt + w2 ) % mod;if ( l == r )return; int mid = ( l + r ) >> 1;if ( id <= mid )modify ( tree[t].l, l, mid, id, w1, w2 );elsemodify ( tree[t].r, mid + 1, r, id, w1, w2 );
}void query ( int &t, int l, int r, int L, int R, LL &s1, LL &s2 ) {if ( ! t )return;if ( L <= l && r <= R ) {s1 = ( s1 + tree[t].v ) % mod;s2 = ( s2 + tree[t].cnt ) % mod;return;}int mid = ( l + r ) >> 1;if ( L <= mid )query ( tree[t].l, l, mid, L, R, s1, s2 );if ( mid < R )query ( tree[t].r, mid + 1, r, L, R, s1, s2 );
}
/*外层树状数组*/ 
int lowbit ( int x ) {return x & ( -x );
}void Modify ( int x, int id, LL w1, LL w2 ) {for ( int i = x;i <= n;i += lowbit ( i ) )modify ( root[i], 1, n, id, w1, w2 );
}void Query ( int l, int r, int L, int R, LL &s1, LL &s2 ) {if ( L > R )return;LL w1 = 0, w2 = 0;//[l,r]=[1,r]-[1,l-1]for ( int i = r;i >= 1;i -= lowbit ( i ) )query ( root[i], 1, n, L, R, s1, s2 );for ( int i = l - 1;i >= 1;i -= lowbit ( i ) )query ( root[i], 1, n, L, R, w1, w2 );s1 = ( s1 - w1 + mod ) % mod;s2 = ( s2 - w2 + mod ) % mod;
}
//以下标作为外层树状数组,以优先级作为内层线段树(树状数组套线段树) 
int main () {scanf ( "%d %d", &n, &m );for ( int i = 1;i <= n;i ++ )scanf ( "%lld %lld", &a[i], &v[i] );for ( int i = 1;i <= n;i ++ ) {LL s1 = 0, s2 = 0;Modify ( i, a[i], v[i], 1 );Query ( 1, i - 1, a[i] + 1, n, s1, s2 );ans = ( ans + s1 + v[i] * s2 % mod ) % mod;}for ( int i = 1;i <= m;i ++ ) {int l, r;scanf ( "%d %d", &l, &r );if ( l == r ) {printf ( "%lld\n", ans );continue;}if ( l > r )swap ( l, r );//l和r进行交换,只会对(l,r)区间带来影响 LL s1 = 0, s2 = 0, w1 = 0, w2 = 0;Query ( l + 1, r - 1, a[l] + 1, n, s1, s2 );//原本比l优先级高的在l交换后就形成了逆序对 Query ( l + 1, r - 1, 1, a[l] - 1, w1, w2 );//原本比l优先级低的在交换后就不再形成逆序对 ans = ( ans + s1 - w1 + mod ) % mod;ans = ( ans + s2 * v[l] % mod - w2 * v[l] % mod + mod ) % mod;//注意l和r的情况刚好是相反的 s1 = s2 = w1 = w2 = 0;Query ( l + 1, r - 1, 1, a[r] - 1, s1, s2 );//原本比r优先级低的在交换后就形成了逆序对 Query ( l + 1, r - 1, a[r] + 1, n, w1, w2 );//原本比r优先级高的在交换后就不再形成逆序对 ans = ( ans + s1 - w1 + mod ) % mod;ans = ( ans + s2 * v[r] % mod - w2 * v[r] % mod + mod ) % mod;//单独考虑l和r之间的关系 if ( a[l] < a[r] )ans = ( ans + v[l] + v[r] ) % mod;if ( a[l] > a[r] )ans = ( ans - v[l] - v[r] + mod ) % mod;//很巧妙,如果要删掉某一个数的信息,就传mod-(...),这样相加再取模就刚好消成了0实现了删除操作 Modify ( l, a[l], mod - v[l], mod - 1 );Modify ( r, a[r], mod - v[r], mod - 1 );Modify ( l, a[r], v[r], 1 );Modify ( r, a[l], v[l], 1 );swap ( a[l], a[r] );swap ( v[l], v[r] );printf ( "%lld\n", ans );}return 0;
}

有什么问题欢迎评论,byebye
在这里插入图片描述

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

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

相关文章

P5659-[CSP-S2019]树上的数【贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P5659 题目大意 给出nnn个点的一棵树&#xff0c;每个节点上有一个数字&#xff0c;你每次可以选择一条边删除然后交换连接的两个点的数字&#xff0c;在删完所有数字后设pip_ipi​表示数字iii所在节点编号&#xff0c;要求使…

YBTOJ洛谷P3195:玩具装箱(斜率优化dp)

传送门 文章目录前言解析代码前言 斜率优化dp&#xff0c;就是利用斜率优化的dp &#xff08;逃&#xff09; 解析 第一道斜优的题 分析题目 设sumisum_isumi​为1-i的c的前缀和 容易写出dp转移式&#xff1a; dpimin(dpj(sumi−sumji−j−1−L)2)dp_imin(dp_j(sum_i-sum_ji-…

01.微服务系列介绍

微服务系列实践 .NET CORE在开始之前呢&#xff0c;还是得废话一下&#xff0c;毕竟还是需要介绍一下这个系列我们要实现什么样的一套服务架构&#xff0c;也让大家能初步的有一个了解&#xff0c;后续实践起来也有一个完整的概念&#xff0c;相对也会容易的多。互联网架构演变…

Walker

Walker 题意&#xff1a; 一个区间[0,n]&#xff0c;区间上有两个点&#xff0c;坐标分别是pos1&#xff0c;pos2&#xff0c;速度分别是v1&#xff0c;v2&#xff0c;这两个点是在移动&#xff0c;可以随时改变移动方向&#xff0c;问当区间的每一块均被一个点或两个点移动覆…

【网络流】最大流问题(EK算法带模板,Dinic算法带模板及弧优化,ISAP算法带模板及弧优化)上下界网络流

本blog重点是代码网络流的相关概念流网络(flow network)流(flow)网络的流残留网络(residual network)增广路径(augmenting path)Edmonds-Karp算法思想bfs模板调用EK&更新残留网络流模板luogu的AC代码(EK版)Dinic算法思路时间复杂度证明bfs模板模板1模板2dfs模板不带弧优化模…

Rainbond 5.0正式发布, 支持对接管理已有Kubernetes集群

今天很高兴的向大家宣布Rainbond v5.0正式发布&#xff0c;Rainbond是开源的企业应用云操作系统&#xff0c;支撑企业应用的开发、架构、交付和运维的全流程&#xff0c;通过无侵入架构&#xff0c;无缝衔接各类企业应用&#xff0c;底层资源可以对接和管理IaaS、虚拟机和物理服…

Fibonacci

Fibonacci 题意&#xff1a; f[i]表示第i位的斐波那契数列 给定n&#xff0c;求 题解&#xff1a; 这种题一开始没什么思路&#xff0c;那么枚举就行 g(x,y) 1 是当x * y为偶数时 x * y为偶数说明&#xff1a; x是偶数&#xff0c;y也是偶数 x是奇数&#xff0c;y是偶数 而…

基于.NET Standard的分布式自增ID算法--美团点评LeafSegment

概述前一篇文章讲述了最流行的分布式ID生成算法snowflake&#xff0c;本篇文章根据美团点评分布式ID生成系统文章&#xff0c;介绍另一种相对更容易理解和编写的分布式ID生成方式。实现原理Leaf这个名字是来自德国哲学家、数学家莱布尼茨的一句话&#xff1a;There are no two …

[费用流专题]Going Home,Minimum Cost,工作安排

文章目录T1&#xff1a;Going Home题目题解CODET2&#xff1a;Minimum Cost题目题解CODET3&#xff1a;工作安排题解CODET1&#xff1a;Going Home 题目 On a grid map there are n little men and n houses. In each unit time, every little man can move one unit step, e…

Sky Garden

Sky Garden 题意&#xff1a; 画n个圆和m条直线&#xff0c;圆的中心点为(0,0)&#xff0c;圆的半径分别从1到n&#xff0c;而直线都必经过(0,0)点&#xff0c;并且所有直线会把每个圆平均分成2m个面积相等的区域&#xff0c;直线会和圆形成交点&#xff0c;求所有交点两两经…

IdentityServer4-前后端分离的授权验证(六)

上两节介绍完Hybrid模式在MVC下的使用&#xff0c;包括验证从数据获取的User和Claim对MVC的身份授权。本节将介绍Implicit模式在JavaScript应用程序中的使用&#xff0c;使用Node.jsExpress构建JavaScript客户端&#xff0c;实现前后端分离。本节授权服务和资源服务器基于第四和…

人类智慧贪心

题意看起来很清新&#xff0c;代码实现也基本在入门难度&#xff0c;但是为什么我不会&#xff01; 另&#xff1a;反悔贪心 <details><summary>$\texttt{solution}$</summary></details> P2672 [NOIP2015 普及组] 推销员 $\texttt{solution}$ 发现答案…

周末狂欢赛3(跳格子,英雄联盟,排序问题)

文章目录T1&#xff1a;跳格子题目题解CODET2&#xff1a;英雄联盟题目题解CODET3&#xff1a;排序问题题目题解CODET1&#xff1a;跳格子 题目 n 个格子排成一列&#xff0c;一开始&#xff0c;你在第一个格子&#xff0c;目标为跳到第 n 个格子。在每个格子 i 里面你可以做…

想让AI在企业落地?微软最新Azure AI不容错过!

Microsoft Connect(); 2018 如期举行&#xff0c;大会上发布的众多顶尖技术&#xff0c;瞬间引爆了全球&#xff01;AI的高速发展&#xff0c;正在掀起新一波的创新浪潮。对于很多企业来说&#xff0c;AI创造的巨大价值&#xff0c;是不容错过的风口&#xff0c;大会上&#xf…

[费用流]数字配对,新生舞会

文章目录T1&#xff1a;数字配对题目题解CODET2&#xff1a;新生舞会题目题解CODE&#xff08;最大费用最大流版&#xff09;CODE&#xff08;最小费用最大流版&#xff09;T1&#xff1a;数字配对 题目 有 n 种数字&#xff0c;第 i 种数字是 ai、有 bi 个&#xff0c;权值是…

.NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

作为后端开发的我来说&#xff0c;前端表示真心玩不转&#xff0c;你如果让我微调一个位置的样式的话还行&#xff0c;但是让我写一个很漂亮的后台的话&#xff0c;真心做不到&#xff0c;所以我一般会选择套用一些开源UI模板来进行系统UI的设计。那如何套用呢&#xff1f;今天…

[FFT/IFFT]快速傅里叶(逆)变化 + 递归和递推模板

现在时间是2021-2-2&#xff0c;重新回来看2019学习的一知半解的FFTFFTFFT&#xff0c;又有了新的理解 所以修改了以往写过的文章&#xff0c;并增添些许内容 因为过去一年多&#xff0c;上了高中&#xff0c;学的知识多了些&#xff0c;以前不懂的有些东西现在看来挺简单的&am…

软件开发模式:瀑布与敏捷

瀑布和敏捷不是什么新概念&#xff0c;这里只是个人在团队合作中不得不去思考而做的归纳和总结&#xff0c;同时记录自己曾经踩过的坑&#xff0c;新瓶装旧酒&#xff0c;希望对你有所启发。瀑布模式瀑布模型是比较传统一种开发模式&#xff0c;特别是在2B的传统企业&#xff0…

.net core+Spring Cloud学习之路 一

文章开头唠叨两句。2019年了&#xff0c;而自己参加工作也两年有余了&#xff0c;用一个词来概括这两年多的生活&#xff0c;就是&#xff1a;“碌碌无为”。也不能说一点收获都没有&#xff0c;但是很少。2019来了&#xff0c;我立志要打破现状&#xff0c;改变自己&#xff0…

P3128 [USACO15DEC]Max Flow P

P3128 [USACO15DEC]Max Flow P 树上差分之点差分模板题 题目描述&#xff1a; FJ给他的牛棚的N(2≤N≤50,000)个隔间之间安装了N-1根管道&#xff0c;隔间编号从1到N。所有隔间都被管道连通了。 FJ有K(1≤K≤100,000)条运输牛奶的路线&#xff0c;第i条路线从隔间si运输到隔…