啦啦啦啦啦啦啦啦啦
啦啦啦
啦啦啦啦啦啦啦啦啦
转载
前 30 分钟通读题目:快速浏览所有题目,标记难度等级和预估得分,优先选择有把握的题目开始作答,避免因卡题浪费时间。
分阶段把控进度:
第 1 小时:完成简单题或部分分代码框架,确保基础分数;
第 2-3 小时:集中攻克中等难度题目,优化代码逻辑;
最后 1 小时:检查已写代码,完善注释和边界条件处理,冲刺难题部分分;
ABC221G
神秘题,将坐标轴转 bitset
优化背包,记录路径把刚刚被更新的找出来,然后 _Find_next
,每个点只会记一次。
AGC050a
神秘题,想到
魔法少女网站
Ynoi,思路是对操作分块,每
对于一次询问,把
剩下和修改有关的点每次暴力跑
常数爆炸,注意到每个点记录的连续段左右端点只会有一个,所以可以压成一个数组,还有基数排序等等卡常技巧。
最后还是过不去后面的点,拼了个暴力过了????
暴力过 Ynoi
Amusement Park
学习子集反演:
本题考虑 dp,
枚举一圈入度为
考虑枚举独立集,可以预处理,然后容斥。考虑容斥系数是啥。
令
然后就做完了。
学习一个枚举子集的小技巧:
for(int i=1;i<(1<<n);i++)
for(int j=i;j;j=i&(j-1))
Desant
再看还是没思路啊。
注意到数据范围,枚举子集,
直接记录状态就是
但是后面没有选的元素只有
所以处理出连续段,然后 hash 起来作为状态,
即
转移时枚举区间和,然后合并区间。
小清新人渣的本愿
由乃的玉米田
图很炸裂。
很水啊,乘法枚举因数就是 bitset
就行。
除法也很好做,上面已经确定是根号或者 bitset
的算法了。
考虑根号分治,大于
小于
最后因为空间问题,bitset
一样。
游走
XOR和路径
若干年前欠下的高斯消元,省选前来学一下。
两道题看起来差不多,但是感觉不太一样。
第一道是板子,答案就是每条边期望经过次数,发现边的不太好直接算,先算点的,然后就能知道边期望次数了。
第二道先拆位,有效边被走次数为奇数就有贡献,还想这样做,发现毫无办法知道边经过奇数次的概率,那么就直接记从
然后就做完了。
放个高消的板子。
code
#include<bits/stdc++.h>
using namespace std;
const int N = 65;
#define double long double
const double eps = 1e-18;
int n;
double a[N][N],ans[N];
int main()
{
// freopen("in.in","r",stdin);
// freopen("out.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n+1;j++)
{
scanf("%Lf",&a[i][j]);
}
}
for(int j=1;j<=n;j++)
{
int t=0;
for(int i=1;i<=n;i++)
if((i>=j||fabs(a[i][i])<=eps)&&fabs(a[i][j])>fabs(a[t][j])) t=i;
if(!t) continue;
for(int k=1;k<=n+1;k++) swap(a[j][k],a[t][k]);
for(int i=1;i<=n;i++) if(i!=j)
{
double t=a[i][j]/a[j][j];
for(int k=1;k<=n+1;k++) a[i][k]-=t*a[j][k];
}
}
bool no=0,oo=0;
for(int i=1;i<=n;i++)
{
if(fabs(a[i][i])>eps) ans[i]=a[i][n+1]/a[i][i];
else if(fabs(a[i][n+1])>eps) {no=1;}// 判无解
else {oo=1;}// 无穷解
if(fabs(ans[i])<eps) ans[i]=0;
}
if(no) printf("-1\n");
else if(oo) printf("0\n");
else
{
for(int i=1;i<=n;i++) printf("x%d=%.2Lf\n",i,ans[i]);
}
return 0;
}
MUL-Multidrink
超级大模拟.话说现在怎么人均场切黑了!!
当然思路也很难想啦,容易发现叶子是特殊的,而且从
先把根链拿出来,根链外的子树必须形如一条链上挂若干个叶子,否则不可能跳回来。
先考虑这部分怎么做,先把这条链拿出来,然后隔一个遍历,途中把上一个节点的叶子收了。(如图)
忽视叶子,对于每一个有一棵子树的根链上的节点都这样跑,如果没有那它可以直接跳到下一个节点,帮助下一个节点跑一棵子树。
贪心策略就是这样。
划分
长度为
的 串,划分成两个长度分别为 的序列,得到两个二进制数使其和最大。
贪心,最终目的就是使
令
所以反过来先将
Easy Problem
长度
的序列选出长度 的子序列,使 最大,对于每个 求解。
暴力:
考虑优化,发现毫无前途。
考虑每个数的贡献,只要这个区间内有比它大的和比它小的那么就有贡献,单调栈找到前一个比它大的、小的,后一个比它大的、小的。贡献位置有本身的位置,后一个大、小的出现位置,扫描线 dp。
Trash Problem
暴力就能过,但是暴力都不会。
具体扫描时确定下界,对于每一列,两个一组,记录上面那个的位置。
第一个下界是无法两个一组匹配了,第二个是和上一列拼完剩下无法匹配的位置成为下界。实现时记录不能作为下界的位置。
Minimum Cost Paths P
看到平方想差分!!!
对于每一列来说,每两个的差值都是
转移到下一列,如果横着走过去,那么差值会增加
前者是一条斜线,后者是平台,最终得到的差分就是单调不降的。
每次进行后缀推平,用栈记,然后连续一段就是横着走的,段与段之间是向下走的,记录每一段开头的位置和值,可以计算。
扫描线。
大概长这样。
Counting Triangles 2
赛时怎么也没想到那个边长为
暴力:枚举每个点,列式子求另外一个点的范围,即转
玄学解法,按暴力打表,发现有规律,做两次二维差分,就做完了。
Build the Tower
玄学。
因为这道题去学了高消,但是和高消没关系。
令
发现这是个类似树上的问题,转移由儿子和父亲转移过来。
考虑边界
观察到最后那个式子表示我们可以用父亲表示儿子,可以写成如下形式:
首先处理状态,注意到这个东西只和子树有关,也就是我们不关心退栈操作了,所以状态只需要记录栈顶元素和权值和。
然后递归上去带回就能求出每一个点和其父亲的关系。
最终答案没有父亲,所以答案就是
茎
把根链单拿出来做 dp,其他子树跑背包。
根链从
还是做背包。
CF204E
给定一个字符串序列
,定义一个“好串” 当且仅当这个串在不少于 个字符串中出现过,问每个串 的子串中“好串”的数量。
复习 SA。
首先把所有
在多少个字符串出现过可以二分 ST 表加主席树区间数颜色做。
注意到如果一个大的串合法,那么它的子串也是合法的,这个也可以二分。
复杂度
ARC189D
单调栈,发现一个小的如果能在若干步后合并一个大的,那么反过来大的一定能合并小的,答案是一样的。
所以并查集,将小的答案指向它能合并的大的上,注意相等情况需要特判。
ARC187B
若干年前感觉超级困难的题,现在能自己做了。
过了发现才只是蓝。深深的感到自己的弱小。
发现每一个连通块一定都是一个区间。
考虑连通块内最大的元素,一个前面的点和它没有连边当且仅当前缀最小值大于它,同理考虑最小的元素和后面没有连边当且仅当后缀最大值大于它。
所以问题变成区间计数,考虑贡献记在左端点,即每个点有多少种方案作为左端点。
枚举前缀最小值,可以容斥一下,然后就能确定后缀最大值的范围。
IZLET
对于相邻且同种颜色的点可以直接缩,剩下的发现一下,只在路径颜色数为
同颜色直接缩应该是没问题的,为什么任意一棵生成树就是对的?
考虑把有两种颜色交替的路径拿出来,会形成一个团,我们其实并不关心这个团内部的结构,只要它是颜色交替,并且和外面的边的连接是正确的就行。
同样,团与团之间的顺序也是不关心的。
三分
哈哈,刚学会三分,每次取
有平台不可以。
ARC191C
太困难了!
如果没有最小解要求,容易想到
然后神奇想到
ARC189B
感觉很困难啊。
如果想到差分就好说了,其实就是交换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!