2023CCPC江西省赛

2023江西省赛

Dashboard - 2023 (ICPC) Jiangxi Provincial Contest -- Official Contest - Codeforces

A 签到
L 签到
I 签到 树
J 二次函数 暴力
K 思维
B ⭐⭐ 取模 思维
C ⭐⭐ 博弈 SG函数
H ⭐⭐⭐ 单调队列优化 多重背包
D<---- ⭐⭐⭐ 栈 dp/卡特兰数 思维
E ⭐⭐⭐⭐ 线段树结构题
F ⭐⭐⭐⭐ dp
G ⭐⭐⭐⭐ dp 树链剖分

A - Drill Wood to Make Fire

void solve()
{
    int s,v;
    cin>>n>>s>>v;
    if(s*v>=n) cout<<1<<endl;
    else cout<<0<<endl;
}

L - Zhang Fei Threading Needles - Thick with Fine

void solve()
{
    cin>>n;
    cout<<n-1<<endl;
}

I - Tree

J - Function

思路:

注意到bi<=n 所以x=a的答案最多为n

对于x=a的最小值 首先考虑对称轴为x=a的函数 ans=min(bi);
对于其他对称轴来说 想要比ans还小 则(a-ai)^2+bi的值一定要小于等于n
也就是(a-ai)^2+bi<=n 则a-sqrt(n-bi)<=ai<=a+sqrt(n-bi)
当bi=0时 x的范围最大 为2sqrt(n);
所以直接枚举即可

K - Split

思路:

首先考虑查询操作
由于序列是非递增的所以每一段的差值就是左端-右端 进一步的 把相邻数差分 答案也就是这些差分的和
哪些差分需要去掉能使答案最小
假设有一组数 49 39 28 8 3 1
差分为 10 11 29 5 2
如果k=3 假设分成[49][39,..,8][3,1] 那么答案为11+29+2
可以发现49-39之间的10 和 8-3之间的5 不被计算
也就是说分成k个区间后有k-1个差分的数不会被计算
要使答案最小则去掉k-1个最大的差分数即可

对于修改操作
a[x-1],a[x],a[x+1]----a[x-1],a[x-1]+a[x+1]-a[x],a[x+1]
对于差分的数来说 可以发现没有变化 所以 修改操作不会改变整体差分的数的值

B - Wonderful Array

思路:

b[i]相当于a[i]的前缀和 对b[i]取模相当于对a[i]分别取模再求和
由于对a[i]取模 b[i]-b[i-1]的范围为[0,m-1]
因为b[i]是递增的 求b[i]mod m<=b[i+1]]mod m数量很多
考虑求b[i]mod m> b[i+1]mod m
因为b[i+1]-b[i]的范围为[0,m-1] 所以一般b[i]mod m<= b[i+1]mod m
如果b[i]mod m>b[i+1]mod m所以说明b[i+1]超过m
也就是b[i+1]/m > b[i]/m 即b[i+1]/m != b[i]/m
求整体b[i+1]/m !=b[i]/m的值 也就是b[n]/m;

C - Battle

SG函数打表找规律

posted @   Danc1ng  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示