CSP J 复赛游记
2026-10-05 18:24:45
发布于:湖北
这个区忘了 ST 表,导致 S 初赛被周飞,所以只有 J 打了。
标题何意味.
由于和上一篇训练目的不同,所以单开。
9.24
P7909
时候不早了,随便挑个橙玩玩。
因为要找到最大的 ,如果 除以 的商下取整相等,则在满足 的情况下 越大越好,于是我们取 。否则, 最大值明显为 ,直接输出 即可。
代码
namespace yxdl1{
void solve(){
int n,l,r;
std::cin >> n >> l >> r;
if(l/n==r/n)std::cout << r%n;
else std::cout << n-1;
}
}
复杂度分析
略
9.25
中秋快乐各位。
13 天假期必须好好补一补 whk 了,也(打算)报了洛谷的课程。但先玩几天(
在酒店看一会 J/S 的题目讲解
9.26
是谁写了一沙滩的毕导。
晚上帮 cchu 调代码,顺便讲一下吧。题目是今晚 ABC 的 D。
这种类型的题目 ABC 似乎出烂了,AtCoder 你只是怕了。
显然 lazy tag 优化,直接线性创飞了。
然后你会收到 AC18,WA13 的好成绩。
下面给一组 hack:
1 4
1 1
2 b
1 1
1 1
相信大家都知道错在哪了,如果直接去判断当前格子的染色状态会很麻烦,复杂度也会炸。也就是说正着维护很难。
触发关键词了。
没错,正难则反。我们反着去处理查询,每次只要找到这个格子最后一次的有效染色即可。
代码
略
复杂度分析
略
9.28
florr 玩破防了,老实滚回来写题。
P1182
唔,一个简单的二分答案,所以我们确定三个点:
check函数- 二分边界
- 二分内容
二分内容不难想,题目要求我们求最小最大值,所以我们二分这个值。边界也比较简单,显然当我分为 段时答案最小,为 ;不分段时最大,为 ,那么边界就没问题了。
来看 check 函数。我们要在保证答案为 的情况下,所分段数不超过 。考虑 求分段数,若当前这一段大小超过 ,则划分新的一段。由于我们需要 维护静态区间和,所以使用前缀和数组。
那就做完了。
代码:
namespace yxdl1{
#define int long long
#define f(i,l,r) for(int i=l;i<=r;i++)
#define max(a,b) (a>b?a:b)
int n,m,a[100005]={},pre[100005]={};
bool check(int mid){
int t=0,now=0;
f(i,2,n){
if(pre[i]-pre[now]>mid){
now=i-1;
t++;
}
}return t>=m?1:0;
}
void solve(){
std::cin >> n >> m;
int l=0,r;
f(i,1,n){
std::cin >> a[i];
pre[i]=a[i]+pre[i-1];
l=max(l,a[i]);
}r=pre[n];
while(l<=r){
int mid=(l+r)>>1;
if(check(mid))l=mid+1;
else r=mid-1;
}std::cout << l;
}
}
复杂度分析
比较简单的分析,二分复杂度 ,check 函数复杂度 ,总复杂度 。其中 为 。
P14247
好神奇的题。
乍一看感觉条件三很难,尝试找规律。
看了一眼样例,没有给我们不合法的情况,猜测都是可以的。
从 开始看,发现随便填都符合条件,当时推到这就开智了。
显然我们构造的这个矩阵中只要包含一个 的由 组成的子矩阵即可满足条件三。
发现条件 要满足“恰有”,看看怎么放可以不出现第二个如上的子矩阵。我们假设 ,在上述条件下,我们可以在右侧与下侧全部填 ,右下角填 ,构造出来的矩阵是这样的:
1 2 5
2 4 5
5 5 6
那怎么往下扩展呢,看看 的情况,按照上述方法构造,矩阵如下:
1 2 5 7
3 4 5 7
5 5 6 7
7 7 7 8
发现,若 是一个合法的构造,考虑在其右,下侧最后一列(排)放入 ,最右下角放 。不管怎么圈,除了最左上角的子矩阵外,总是有且只有两个数重复。这样就满足了“恰有”这个条件,进而满足了所有条件。
代码
略
复杂度分析
显然为
10.1
P17288
高速上写的,脑子不清醒写了个石山。
直接模拟即可,思路不讲诗人都会吧。
代码
namespace yxdl1{
std::string a[100005]={},b[100005]={};
int cnt;
void solve(){
std::cin >> cnt;
std::string n,m;
std::cin >> n >> m;
int idx=0,is_sum=0;
std::string now;
for(int i=0;i<n.size();i++){
if(!(n[i]>='a' and n[i]<='z')){
now=n.substr(idx,i-idx);
char sum[10005]={};
int index=0,num=0;
while(!(n[i]>='a' and n[i]<='z') and i<n.size()){
sum[index++]=n[i++];
}for(int j=0;j<index;j++){
num=num*10+(sum[j]-'0');
}a[num]=now;
idx=i;
}
}idx=0;
for(int i=0;i<m.size();i++){
if(!(m[i]>='a' and m[i]<='z')){
now=m.substr(idx,i-idx);
char sum[10005]={};
int index=0,num=0;
while(!(m[i]>='a' and m[i]<='z') and i<m.size()){
sum[index++]=m[i++];
}for(int j=0;j<index;j++){
num=num*10+(sum[j]-'0');
}b[num]=now;
idx=i;
}
}for(int i=1;i<=cnt;i++){
std::cout << a[i] << b[i];
}
}
}
复杂度
,证明略
10.5
P10722
看看怎么维护一个节点的翻转次数。
思考一下节点翻转的情况。思考发现这个节点的实际翻转数等于他父节点的翻转数加上他本身的翻转数。我们发现需要维护父节点翻转数。
令当前节点为 , 与 分别为求父节点与求自身翻转次数。则当前节点翻转次数为 。对于 ,其翻转次数为 。以此类推。我们发现需要从根节点向下一步一步维护翻转次数,考虑 dfs。
用三个数组 维护。 为当前节点作为根节点的翻转次数。则每次搜索转移为 。那就做完了。
代码
略
时间复杂度
,证明略
全部评论 22
- 置顶
以及 ZJ 有无 J 复赛面积(
1周前 来自 浙江
1还是算了
1周前 来自 浙江
1别 d
昨天 来自 湖北
0删了
昨天 来自 四川
0
难度:橙黄黄黄
5天前 来自 浙江
2哦不对看错了,是橙黄黄橙
5天前 来自 浙江
1?
5天前 来自 湖北
1哦嫌太简单了是吧,别急后面有几个绿。当然我很菜
昨天 来自 湖北
0
J组人好CS



昨天 来自 广西
1J组课间S组来刷屏
昨天 来自 广西
1陈贝豪,冯辰晔和徐溶!!!!!
昨天 来自 广西
0我报的不是小码王的课,我报的是洛谷
昨天 来自 湖北
1
你要不要去CSP-S复赛看看包你绝望。直播间号:xmw777
2天前 来自 广西
1


2天前 来自 广西
1我不是 xmw 的课,我是洛谷的
2天前 来自 湖北
0我绝望了。我绝望了。我绝望了。我绝望了。我绝望了。
昨天 来自 广东
0
我是正着写D题的。
我前三题30min内做出,D题在前面卡了半天,花时间写了对拍,又花了大把时间思考到底用链?指针?维护,最后用一个记录最近一次打开的数组在离比赛10minAC了。(我)60min卡在一道黄题没谁了。4天前 来自 浙江
1这个其实是橙的(
思路不是很难想,这种题 At 都出烂了,难点就是 WA13 这个我情况
4天前 来自 湖北
1橙黄都一样,对比赛结果没有任何影响。
就是special 和 边界情况的情况
4天前 来自 浙江
1是的。
4天前 来自 湖北
1
但是 lazy tag 的我也写出来了
5天前 来自 江西
1只是要分情况做
5天前 来自 江西
1
懒得去找提单了,你发一道我就做一道(
20小时前 来自 重庆
078,这个是洛谷 J 组秋令营提单摘的
20小时前 来自 浙江
0可以可以多发点,免费上课,性价比++
19小时前 来自 重庆
087
19小时前 来自 浙江
0
P17288 都来了。都去做 P17289 赤石。
昨天 来自 广东
0滚木大模拟说是
昨天 来自 湖北
0
这么强么这,还有独立切题
昨天 来自 广东
0注意到。
jodio9
印象分 99%,和 leo 同期认识的 \dsa/,总批话扣 1%(昨天 来自 湖北
0csxx601cjy
印象分 0%,我不认识你。
印象分0%,我不认识你昨天 来自 广东
0都是橙黄有啥好 P 的(
昨天 来自 湖北
0
还得是我
#define哥
#define int long long权威!2天前 来自 浙江
0这是 UB(
2天前 来自 湖北
0
嗯,对我很有帮助
2天前 来自 新疆
0怎么还在串
2天前 来自 湖北
0?
2天前 来自 新疆
0
那我不会
3天前 来自 浙江
0作者作者你是怎么知道我 ABC477 也这样了(蒟蒻最终没做出来
)
5天前 来自 江苏
0好像是第3个说有这个问题的了、
5天前 来自 上海
0我前三题30min内做出,D题在前面卡了半天,花时间写了对拍,又花了大把时间思考到底用链?指针?维护,最后用一个记录最近一次打开的数组在离比赛10minAC了。(我)60min卡在一道黄题没谁了。
4天前 来自 浙江
0
2
5天前 来自 浙江
0知识以一种奇怪的方式进入了我的脑子

5天前 来自 江苏
0是的
2天前 来自 浙江
0
数论? 题快1ms切掉
5天前 来自 浙江
0这题不是直接连除就能过吗、
5天前 来自 上海
0所以打了问号,赛时我结论猜的还过了/jk
5天前 来自 浙江
0其实我还有 2绿 1 蓝没写上去,后面找时间写下
2天前 来自 湖北
0
看你没做P1638可以写一下
1周前 来自 浙江
0我在缓慢蠕动尝试稳黄
1周前 来自 浙江
0一直上不去呢,以前 AI 用贪了导致思维能力是史
1周前 来自 浙江
0一看你就是要训练到看到黄1ms切的那种,dsa
1周前 来自 浙江
0
本人河北入,74

1周前 来自 河北
0S 吗,dsa
1周前 来自 浙江
0J
1周前 来自 河北
0河北随便过
1周前 来自 浙江
0
ptr是不是可以
1周前 来自 浙江
0ptr 是谁
1周前 来自 浙江
0nullptr
1周前 来自 浙江
0
细节标题被和谐了
1周前 来自 上海
0























































有帮助,赞一个