ICode9

精准搜索请尝试: 精确搜索
  • 洛谷P4458 [BJOI2018]链上二次求和2022-05-05 22:01:25

    洛谷P4458 [BJOI2018]链上二次求和 有一条长度为 \(n\) 的链(连接方式为 \(1-2-3-\cdots-n\)),第 \(i\) 个点的权值为 \(a_i\)。 有 \(m\) 个操作,分为修改和查询两类: 修改:将 \(u\) 到 \(v\) 路径上所有点的权值加上 \(d\)。 查询:对于所有包含 \(l\sim r\) 个点的路径计算上面的点的

  • 题解 P4427 [BJOI2018]求和2021-06-20 20:03:23

    Solution lca+前缀和 快读不要忘写c= 复杂度 \(O(nk)\) Code #include<iostream> #include<cstdio> #include<cstdlib> #define ll long long using namespace std; const int maxn=3e5+5; int read() { int ret=0;char c=getchar(); while(c>'9'

  • P4427 [BJOI2018]求和2020-11-24 12:33:28

    题目描述 master 对树上的求和非常感兴趣。他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的kk 次方和,而且每次的kk 可能是不同的。此处节点深度的定义是这个节点到根的路径上的边数。他把这个问题交给了pupil,但pupil 并不会这么复杂的操作,你能帮他解决吗? 输

  • ! BJOI2018链上二次求和2020-03-27 11:08:53

    此题实际就是序列上的问题(只是链的话不一定\(u<v\),判一下) \(ans=\sum_{i=l}^r\sum_{j=i}^ns_j-s_{j-i}=\sum_{i=l}^r(\sum_{j=i}^ns_j-\sum_{j=0}^{n-i}s_j)\) 改成二维前缀和 \(ans=\sum^r_{i=l}ss_n-ss_{i-1}-ss_{n-i}\) 用线段树维护二维前缀和即可(肯定是一个二次函数,拆开算

  • ! BJOI2018染色2020-03-26 16:51:09

    首先有奇环肯定不行 手算一下发现下列两种不行: 不行的: 奇环 形成3个及以上的环\((m>n+1)\) \(m=n+1\)即两个偶环相交是相交的两个点之间的三条链不满足\(2+2+偶数\) 详解 用\(dfs\)+拓扑排序判一下即可 #include<bits/stdc++.h> using namespace std; inline int read(){ i

  • BJOI2018 治疗之雨2020-03-22 13:55:36

    落谷、Loj。 前置知识 高斯消元 快速幂 Description 共有 \(m + 1\) 个数,第一个初始值为 \(p\),必须在 \([0, n]\) 的区间修改,剩下 \(m\) 个都是无穷。 每轮操作是: 不为最大值的数中等概率随机选择一个把它 \(+1\) \(k\) 次找一个不为最小值的数把它 \(-1\) 如果不存在就不操作

  • 「BJOI2018」求和2020-01-23 23:01:10

    「BJOI2018」求和 传送门 观察到 \(k\) 很小而且模数不会变,所以我们直接预处理 \(k\) 取所有值时树上前缀答案,查询的时候差分一下即可。 参考代码: #include <algorithm> #include <cstdio> #define rg register #define file(x) freopen(x".in", "r", stdin), freopen(x".out", &quo

  • [BJOI2018]求和2019-07-07 13:02:36

    考虑每一次要求的是一条路径上深度的\(k\)次方和,但是\(k \leq 50\),所以可以先把\(k\)的所有情况预处理出来,然后直接树上差分就行了。 /* mail: mleautomaton@foxmail.com author: MLEAutoMaton This Code is made by MLEAutoMaton */ #include<stdio.h> #include<stdlib.h> #

  • 【BJOI2018】求和2019-05-03 15:50:50

    这是一道树链剖分/树上差分/LCA的题目…… 本来想打一遍树剖,但是被那强大的码量劝退了,于是我开始思考树上差分。 我们先把每个点深度的k次方打一个表,之后我们因为要做减法,所以我们令vali,k​表示i到1号点路径上点深度的k次方之和 然后问题来了,我们维护的是点权和,所以我们发现直接减

  • [BZOJ5292] [BJOI2018]治疗之雨2019-04-02 17:38:01

    题目链接 BZOJ:https://lydsy.com/JudgeOnline/problem.php?id=5292 洛谷:https://www.luogu.org/problemnew/show/P4457 LOJ:https://loj.ac/problem/2513 Solution 神仙期望题(可能是我期望太差了QAQ) 这题看懂题可能占了\(50\%\)的难度.... 题目中的最大值最小值指的是上限和下限,我

  • BZOJ5294 BJOI2018 二进制 线段树2019-03-08 22:53:15

    传送门 因为每一位\(\mod 3\)的值为\(1,2,1,2,...\),也就相当于\(1,-1,1,-1,...\) 所以当某个区间的\(1\)的个数为偶数的时候,一定是可行的,只要把这若干个\(1\)放在一起就可以了。 而当某个区间的\(1\)的个数为奇数的时候,那么最优的方式显然是\(1\)和\(-1\)两两配对,剩下\(3\)个\(1\)

  • 2019.03.06【BJOI2018】【洛谷P4427】【BZOJ5293】求和(LCA)2019-03-06 18:53:48

    洛谷传送门 BZOJ传送门 解析: 连修改都不带还玩什么。。。 直接处理出每个点到根的路径上的所有KKK次方之和。 然后随便用一个求LCA的方法水过去就行了。 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #define re register #define gc get_char

  • [luogu4459][BJOI2018]双人猜数游戏(DP)2019-02-16 13:53:26

    https://zhaotiensn.blog.luogu.org/solution-p4459 从上面的题解中可以找到样例解释,并了解两个人的思维方式。 A和B能从“不知道”到“知道”的唯一情况,就是根据已知条件(也就是已经说的”不知道“次数)排除手上数的所有其它合法拆分方案。 那么,设dp[i][j][k]表示,两个数分别为i,j,当

  • loj2512 [BJOI2018]链上二次求和2019-02-15 10:52:46

    传送门 分析 咕咕咕 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype> #include<cmath> #include<cstdlib> #include<queue> #include<ctime> #inclu

  • 【BZOJ5293】[BJOI2018]求和(前缀和,LCA)2019-02-13 11:53:33

    【BZOJ5293】[BJOI2018]求和(前缀和,LCA) 题面 BZOJ 洛谷 题解 送分题??? 预处理一下\(k\)次方的前缀和。 然后求个\(LCA\)就做完了?、、、 #include<iostream> #include<cstdio> using namespace std; #define MOD 998244353 #define MAX 300300 inline int read() { int x=0;bool t=

  • [BZOJ5293][BJOI2018]求和(倍增)2019-02-11 08:50:51

    裸的树上倍增。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 5 using namespace std; 6 7 const int N=300010,mod=998244353; 8 struct E{ int to,nxt; }e[N*2]; 9 int fa[N],a[N],d

  • [BZOJ5294][BJOI2018]二进制(线段树)2019-02-11 08:50:28

    https://www.cnblogs.com/Yuzao/p/9069527.html 合并的时候大力讨论一下即可,不是特别复杂。 1 #include<cstdio> 2 #include<algorithm> 3 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 4 #define ls (x<<1) 5 #define rs (ls|1) 6 #define lson ls,L,mid 7 #define

  • [洛谷 P4457] [BJOI2018]治疗之雨2019-02-07 18:39:56

    [BJOI2018]治疗之雨 参考博客 https://www.luogu.org/blog/ShadowassIIXVIIIIV/solution-p4457 洛谷 P4457 题目大意 \(T\) 组数据 场上有 \(m\) 个生命值无上下限的随从与 \(1\) 个生命值上限为 \(n\) 下限为 \(0\) 当前为 \(p\) 的英雄,现在每次随机选择一个生命值不为下限的人

  • Bzoj5294/洛谷P4428 [Bjoi2018]二进制(线段树)2019-02-03 15:50:43

    题面 Bzoj 洛谷 题解 考虑一个什么样的区间满足重组之后可以变成\(3\)的倍数。不妨设\(tot\)为一个区间内\(1\)的个数。如果\(tot\)是个偶数,则这个区间一定是\(3\)的倍数,接着考虑奇数的情况。 如果只有\(1\)个\(1\),那么无论如何都不行,只需考虑\(3\)个\(1\)的情况,因为其他的\(1\)可

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有