暑假集训CSP提高模拟2
A.活动投票
主元素问题,用摩尔投票
#include<bits/stdc++.h>
using namespace std;
int n,a=-1,acnt,x;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&x);
if(acnt==0){
a=x;
acnt++;
}
else if(a==x){
acnt++;
}
else{
acnt--;
if(acnt==0) a=-1;
}
}
printf("%d",a);
}
B.序列
mei ting dong
C.Legacy
赛时打的时候想可能是 DIJ 会假,结果 DIJ 没假,但是建图意料之中的 T 了.
这道题的建图非常有特色,区间建图的话,虽然不知道怎么建,但是确实是应该想到线段树.
考虑建分层图,然后把目标区间用线段树拆成节点,因为目标区间可以是出边也可以是入边,所以分两层,然后在每层叶节点连边权为零的边,这样建图复杂度只有 \(log\). 然后在树上跑 DIJ 就行了
关于 SPFA
- 它死了
D.DP搬运工1
题解里说了,考虑设一个 \(f_{i,j,k}\) 做 DP
但是我觉得题解里的说法不是很清楚,我对这个 DP 的理解是,假设我们现在有一堆格子需要填,用 \(i\) 来表示已经填入的数字数量,\(j\) 来表示目前的空缺总数(注意这里的 “空缺”,一个空格组成的联通块称作一个 “空缺”,这么定义是因为比较好转移),\(k\) 用来表示当前填入数字后的 \(\max\) 总和
我们考虑以下情况(用 \(S\) 表示一个空缺,\(x,y\) 分别表示数字)
xSy
在我们将 \(S\) 填上的时候,假设我们每次都填一个更大的值,显然,填上之前的和是 \(a+b\),之后的和是 \(2k\),显然这么做会很麻烦,因为我们在填的时候还要考虑先把 \(a+b\) 减掉. 因此我们可以想到,与其先加上 \(a+b\) 再减掉,还不如直接不统计这个 \(a+b\) 了,因此我们直接在最后填上的时候再加上边界的贡献,这样就会比较简单.
因此,枚举五种情况:填在外面并合并,填在外面并新建连通块,填在里面并左右合并,填在里面并左或右合并,填在里面并新建联通块. 可以分别得到连通块贡献 \(0,1,-1,0,1\),\(\max\) 求和贡献 \(i,0,2i,i,0\),并且注意情况 \(1,2,4\) 是左右均可的合并方式,方案数贡献需要乘二
初始化 \(f[1][0][0]=1\)
\]
\]
\]
\]
\]
统计答案 \(f[n][0][i]\)
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int p=998244353;
int f[51][51][2501];
int n,kk;
signed main(){
cin>>n>>kk;
f[1][0][0]=1;
for(int i=2;i<=n;++i){
for(int j=0;j<=n-i+1;++j){
for(int k=0;k<=kk;++k){
if(!f[i-1][j][k]) continue;
if(j){
f[i][j][k+i]+=2*f[i-1][j][k]*j%p;
f[i][j+1][k]+=f[i-1][j][k]*j%p;
f[i][j-1][k+2*i]+=f[i-1][j][k]*j%p;
}
f[i][j][k+i]+=2*f[i-1][j][k]%p;
f[i][j+1][k]+=2*f[i-1][j][k]%p;
}
}
}
int ans=0;
for(int i=0;i<=kk;++i){
ans+=f[n][0][i];
ans%=p;
}
cout<<ans;
}
暑假集训CSP提高模拟2的更多相关文章
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1 \dots a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...
- STL 入门 (17 暑假集训第一周)
快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...
- 牛客网NOIP赛前集训营-提高组(第四场)B题 区间
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- 20190820 Tue 集训总结&NOIP模拟 27
低谷度过了? 但是skyh阿卡了,还是反衬出我的辣鸡. T1知道要sort,却忘了判重,正解不如暴力分高,555. T2成功化出正解柿子,然后化过头了,化出了无法DP的柿子. 果然不够强,大神们一眼就 ...
- 暑假集训Day2 互不侵犯(状压dp)
这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. ...
- 暑假集训Day1 整数划分
题目大意: 如何把一个正整数N(N长度<20)划分为M(M>=1)个部分,使这M个部分的乘积最大.N.M从键盘输入,输出最大值及一种划分方式. 输入格式: 第一行一个正整数T(T<= ...
- #10471. 「2020-10-02 提高模拟赛」灌溉 (water)
题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...
随机推荐
- 深入探究 Golang 反射:功能与原理及应用
Hi 亲爱的朋友们,我是 k 哥.今天,咱们来一同探讨下 Golang 反射. Go 出于通用性的考量,提供了反射这一功能.借助反射功能,我们可以实现通用性更强的函数,传入任意的参数,在函数内通过反射 ...
- C# 开发技巧 轻松监控方法执行耗时
前言 MethodTimer.Fody 是一个功能强大的库,可以用于测量 .NET 应用程序中的方法的执行时间.允许你在不修改代码的情况下,自动地测量和记录方法的执行时间. 这个工具是基于.NET的 ...
- 使用with 还是 join
用分解关联查询的方式查询具有以下优势:多次单表查询,让缓存的效率更高:许多应用程序可以方便地缓存单表查询对应的结果对象.对 MYSQL 的查询缓存来说,如果关联中的某个表发生了变化,那么就无法使用查询 ...
- Docker镜像构建:技术深度解析与实践指南
本文深入分析了Docker镜像构建的技术细节,从基础概念到高级技术,涵盖了多阶段构建.安全性优化.性能提升及实战案例.旨在为专业人士提供全面的技术洞察和实用指导,以提升Docker镜像构建的效率和安全 ...
- 前端使用 Konva 实现可视化设计器(19)- 连接线 - 直线、折线
本章响应小伙伴的反馈,除了算法自动画连接线(仍需优化完善),实现了可以手动绘制直线.折线连接线功能. 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue 哟~ ...
- CentOS-7离线安装perl
1.下载相关安装包 CentOS-7 所有rpm包的仓库地址:https://vault.centos.org/7.9.2009/os/x86_64/Packages/ perl-5.16.3-297 ...
- 【Vue】14 UI库
PC端: 第一梯队:基于JQuery实现的Dom操作,和一些简单CSS样式组成 Layui Bootstrap EasyUI 第二梯队:基于Vue2.0开发的UI库,组件化开发 ElementUI A ...
- "基础模型时代的机器人技术" —— Robotics in the Era of Foundation Models
翻译: 2023年是智能机器人规模化的重要一年!对于机器人领域之外的人来说,要传达事物变化的速度和程度是有些棘手的.与仅仅12个月前的情况相比,如今人工智能+机器人领域的大部分景观似乎完全不可识别.从 ...
- Linux中scanf类型匹配错误,特指scanf("%d", &c ) ,导致死循环的解决方法 —— fflush(stdin)和getchar()的使用
如题,朋友领导的孩子大学作业是个C语言编写的管理信息系统发来要我给改改,原代码的配置环境是Windows的C环境,由于10多年没有搞过Windows下的C语言了于是换上了Ubuntu18.04的系统上 ...
- 从baselines库的common/vec_env/vec_normalize.py模块看方差的近似计算方法
在baselines库的common/vec_env/vec_normalize.py中计算方差的调用方法为: RunningMeanStd 同时该计算函数的解释也一并给出了: https://en. ...