2019牛客暑期多校训练营(第一场)
传送门
参考资料:
[1]:官方题解(提取码:t050 )
[2]:标程(提取码:rvxr )
[3]:牛客题解汇总
A.Equivalent Prefixes(单调栈)
•题意
定义两个数组 u,v ,并且 u,v 都含有 m 个互不相同的元素;
如果数组 u,v 任意区间的RMQ(区间最小值)对应的下标都相等,则说这两个数组是 "equivalent";
先给你包含 n 个不同元素的数组 a,b,求使得 a[1,2,...,p] 与 b[1,2,....,p] 为 "equivalen" 的最大的 p;
•题解
定义数组 L1,L1[ i ]表示在 a 数组中,以 ai 为区间最小值最左可以到达的位置;
即 RMQ( L1[ i ], i ) = ai;
定义数组 L2,含义与 L1 相同,作用于数组 b;
对于位置 i ,找到第一个不满足 L1[i] == L2[ i ] 的位置 i,那么,答案就为 i-1;
•Code
1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 using namespace std; 5 #define ll long long 6 const int maxn=1e5+50; 7 8 int n; 9 int a[maxn]; 10 int b[maxn]; 11 int L1[maxn]; 12 int L2[maxn]; 13 stack<int >sta; 14 15 void Work(int *a,int *L) 16 { 17 while(!sta.empty()) 18 sta.pop(); 19 for(int i=1;i <= n;++i) 20 { 21 while(!sta.empty() && a[sta.top()] >= a[i]) 22 sta.pop(); 23 24 L[i]=sta.empty() ? 1:sta.top()+1; 25 sta.push(i); 26 } 27 } 28 int Solve() 29 { 30 Work(a,L1); 31 Work(b,L2); 32 33 int p=n; 34 for(int i=1;i <= n;++i) 35 if(L1[i] != L2[i]) 36 { 37 p=i-1; 38 break; 39 } 40 return p; 41 } 42 int main() 43 { 44 while(~scanf("%d",&n)) 45 { 46 for(int i=1;i <= n;++i) 47 scanf("%d",a+i); 48 for(int i=1;i <= n;++i) 49 scanf("%d",b+i); 50 51 printf("%d\n",Solve()); 52 } 53 return 0; 54 }View Code
E.ABBA(DP or 组合数学)
•参考资料
[1]:唐宋元明清(DP)
[2]:光芒万丈小太阳(DP)
[3]:rjmgc丁凯朔(组合数学)(待参考)
•题意
求包含 n 个 "AB" 和 m 个 "BA" 的总方案数;
•题解
比赛结束当天,查看了参考资料[2]的博文,当时出于似懂非懂的状态;
今天(2019.7.21)重新看了一下这道题,又看了另一篇博文参考资料[1];
有种恍然大悟的感觉,但任然欠缺点东西,先记录以下,万一那天顿悟了呢。
定义 dp[ i ][ j ] 表示当前包含 i 个 'A' 和 j 个 'B' 的合法序列的总方案数;
如果 i+1 ≤ n+j,转移 : dp[i+1][ j ] += dp[ i ][ j ];
如果 j+1 ≤ m+i,转移 : dp[ i ][ j+1] += dp[ i ][ j ];
这两篇博客对比着理解以下,应该更容易些;(tql)
•Code
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 const int MOD=1e9+7; 5 const int maxn=4e3+50; 6 7 int n,m; 8 ll dp[maxn][maxn]; 9 10 ll Solve() 11 { 12 int s=n+m; 13 for(int i=0;i <= s;++i) 14 for(int j=0;j <= s;++j) 15 dp[i][j]=0; 16 dp[0][0]=1; 17 18 for(int i=0;i <= s;++i) 19 { 20 for(int j=0;j <= s;++j) 21 { 22 if(i+1 <= n+j) 23 dp[i+1][j]=(dp[i+1][j]+dp[i][j])%MOD; 24 if(j+1 <= m+i) 25 dp[i][j+1]=(dp[i][j+1]+dp[i][j])%MOD; 26 } 27 } 28 return dp[s][s]; 29 } 30 int main() 31 { 32 while(~scanf("%d%d",&n,&m)) 33 { 34 printf("%d\n",Solve()); 35 } 36 return 0; 37 }View Code
转载于:https://www.cnblogs.com/violet-acmer/p/11209409.html
2019牛客暑期多校训练营(第一场)相关推荐
- 2019牛客暑期多校训练营(第一场场)_I题Points Division(线段树+DP维护区间最大值)
题目链接: https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点的坐标为(xi,yi),有两个权值ai,bi. 现在要你将它分成A,B两部分, ...
- 2019牛客暑期多校训练营(第三场)H.Magic Line
2019牛客暑期多校训练营(第三场)H.Magic Line 题目链接 题目描述 There are always some problems that seem simple but is diff ...
- 2019牛客暑期多校训练营(第五场)C generator 2 (BSGS)
2019牛客暑期多校训练营(第五场)C generator 2 思路 x0=x0x_0 = x_0x0=x0 x1=a∗x0∗bx_1 = a * x_0 * bx1=a∗x0∗b x2=a∗ ...
- 2019牛客暑期多校训练营(第四场)----E- triples II
首先发出题目链接: 链接:https://ac.nowcoder.com/acm/contest/884/E 来源:牛客网 涉及:位运算,容斥定义,dp 点击这里回到2019牛客暑期多校训练营解题-目 ...
- 【2019牛客暑期多校训练营(第一场) - A】Equivalent Prefixes(单调栈,tricks)
题干: 链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场)E-ABBA(dp)
链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 【2019牛客暑期多校训练营(第一场) - H】XOR(线性基,期望的线性性)
题干: 链接:https://ac.nowcoder.com/acm/contest/881/H 来源:牛客网 Bobo has a set A of n integers a1,a2,-,ana1, ...
- 2019牛客暑期多校训练营(第一场) Integration(定积分)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Bobo knows that Given n distinct positive integ ...
最新文章
- mysql怎么实现事务序列化_一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
- EEPROM的操作---SPI接口和I2C接口
- Flume 1.7 源码分析(三)程序入口
- 前端学习(2324):angular初步使用
- Decoder is not a @Sharable handler, so can't be added or removed multiple times
- 日立数据系统进一步加强与IBM zHPF大型机合作
- Android 系统(182)---Android.mk的用法和基础 amp;amp; m、mm、mmm编译命令
- 编程利器 Beyond Compare 的使用
- python-scrapy框架学习笔记
- java在数组里面添加_java – 如何在数组中间添加?
- The processing instruction target matching [xX][mM][lL] is not allowed
- 微信小程序制作表格代码
- 5V升压充电12.6V锂电池方案
- 基础知识之存活探针(Liveness Probe)
- IT领域的罗马帝国——微软公司
- [面试经验]一汽大众旗下车联网公司摩斯智联面试记
- 数据挖掘简介(摘自维基百科)
- java ctr_分组密码_计数器(CTR)模式_原理及java实现
- 用户数据为什么那么大_为什么那么多用户声讨高德地图?
- 软考高级系统架构设计师:论面向服务的架构及其应用