首页 > 其他分享 >AtCoder Grand Contest 002

AtCoder Grand Contest 002

时间:2025-01-20 16:55:15浏览次数:1  
标签:总结 AtCoder 颜色 Contest Kruskal 002 白球 DP

AtCoder Grand Contest 002 - AtCoder.

EF 赛时不会,E Nekopedia 给我讲了,F 看了题解。

2025.1.18 打比赛、补题、写题解。

A

随便分讨一下。有一种是看 \((b-a+1)\) 的奇偶性。

可以按 \(a<0,a=0,a>0\) 来先对 \(a\) 分类,再分讨对应的 \(b\)。

总结:注意思路清晰点,分讨要有条理,不要怕麻烦。

B

需要注意的就是已经可能有红球的盒子里面的球被拿完后又会变得没有红球。

所以注意要按时间来,记的东西要带时效性,不能直接建图跑 \(1\) 能到多少点什么的。

对每个盒子记当前是否可能有红球和当前球的个数,进行操作即可。

总结:手玩样例;记的东西带时效性。

C

注意到合法的拆分,拆到最后一定只剩下两个相邻的(原先也相邻),它们的和 \(\geq L\)。那么我们直接把这俩留到最后,其他的左边从左往右一个个拆,右边的从右往左一个个拆即可。于是找相邻且加起来 \(\geq L\) 的两个,找到了就按上述策略搞,容易验证存在这样的一对是有解的充要条件(必要性显然;充分性是因为有这个策略),于是如果没找到就是无解。

总结:这种区间 DP 状物但数据范围很大的情况,可以考虑发掘一下特殊性质;证……是有解的充要条件(充分:构造(可以是构造出策略))来判有无解。

D

一眼 Kruskal 重构树(按边),二分 + 树上倍增即可。

似乎还有 整体二分 + 可持久化并查集 做法。(???)(不知道记错没有)

似乎还有单 \(\log\) 做法。(不知道和上一行是不是一个。)

总结:熟悉 Kruskal 重构树的性质和它与其他东西(比如 问题 或 笛卡尔树(?)或 )的关联;按某种顺序维护连通性且在线(Kruskal 重构树);二分简化问题;树上倍增(相比二分,这样上树倍增更合适),Kruskal 重构树上倍增;维护连通性也可以考虑并查集。

E

博弈论好题(个人认为)。

我们把数组从大到小排序,堆馒头堆起来(变成一堆格子),那么两个操作:

  • 删掉最大值:把最左边那列删掉。
  • 全部 \(-1\):把最底下那行删掉。

于是可以进一步转化为在这个格子图上走(左下角是起点):

此处原本有一张图

(直接画图看以每个格子为起点是先手必败还是先手必胜,找规律。)

大力分讨。实现得比较丑陋。

总结:博弈论,分析博弈过程,转化到图像上,画图,找规律,小心细节(包括小心边角情况),情况考虑完整。

F

感觉是有点牛的 DP。

关注最终的样子。

把颜色为 \(0\) 的球叫做白球。我们不关心白球是哪个颜色变过来的。发现限制是任意前缀(从前往后放就是时刻)白球的个数 \(\geq\) 其他颜色球的颜色数。

于是我们直接把 白球的个数 和 其他颜色球的个数 设成 DP 状态的两维,转移就是枚举放白球还是放其他颜色的球。放其他颜色的球是一放就把这种颜色的放完。注意两个点:

  • 记颜色数并没有记是哪些颜色,所以放不是白球的球时要枚举放的颜色是哪种。
  • 放非白色球的时候第一颗球一定是紧跟着放后面(这样才在 DP 的过程中体现颜色的有序(放置顺序)),而后面的这种颜色的球用组合数来写。
    • \(k=1\) 时全是白球,这一步就会出问题。于是 \(k=1\) 直接在开始时特判掉即可。

总结:从最终形态入手;把关键限制设进 DP 状态;不一定要一位位放,可以把同类元素一起放;将顺序融入 DP 中(要注意细节(?));小心处理中会出问题的特殊情况,特殊处理;调用预处理函数

标签:总结,AtCoder,颜色,Contest,Kruskal,002,白球,DP
From: https://www.cnblogs.com/huangkxQwQ/p/18681890

相关文章

  • AtCoder Beginner Contest 389
    A-9x9题意一位数的乘法思路模拟代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;constintmxn=1e6+5;voidsolve(){ strings; cin>>s; cout<<(s[0]-'0')......
  • VP AtCoder Beginner Contest 381
    A-11/22String题意:定义\(11/22\)串是前面都是\(1\)后面都是\(2\),\(1,2\)的个数相同,中间是一个'/'。判断给你的字符串是不是\(11/22\)串。模拟即可。点击查看代码voidsolve(){ intn; std::cin>>n;std::strings;std::cin>>s;if(n%2==0||s.......
  • Atcoder ABC389E Square Price 题解 [ 绿 ] [ 二分 ] [ 贪心 ]
    SquarePrice:垃圾卡精度,垃圾卡精度,垃圾卡精度,傻逼出题人,傻逼出题人,傻逼出题人,傻逼出题人,傻逼出题人,傻逼出题人,傻逼出题人。把ll改__int128前WA*22,改__int128直接AC了,难评。抛开卡精度这题还是挺好的。暴力先考虑暴力思路,显然暴力应该这么打:把所有物品全丢进优先队列......
  • Toyota Programming Contest 2025(AtCoder Beginner Contest 389)
    A-9x9题意:给你一个长度为\(3\)的乘法式,求答案。直接求即可。点击查看代码voidsolve(){std::strings;std::cin>>s;std::cout<<(s[0]-'0')*(s[2]-'0')<<"\n";}B-tcaF题意:求一个\(n\),使得\(n!=x\)。模拟即可。点......
  • P2419 Cow Contest S
    CowContestS此题链接题目FJ的\(N\)(\(1\leqN\leq100\))头奶牛们最近参加了场程序设计竞赛。在赛场上,奶牛们按\(1,2,\cdots,N\)依次编号。每头奶牛的编程能力不尽相同,并且没有哪两头奶牛的水平不相上下,也就是说,奶牛们的编程能力有明确的排名。整个比赛被分成了若干轮......
  • AtCoder Beginner Contest 388
    A-A-?UPC题意给定字符串\(s\),输出\(s\)首个字符与\(UPC\)组成的字符串思路模拟代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongtypedefpair<int,int>pii;constintmxn=1e6+5;voidsolve(){ strings; ci......
  • AtCoder Regular Contest 058 [ARC058] F - Unhappy Hacking
    题意:有三种操作,在右边添加0/1或删除最右边的数(空字符串无操作)给出操作数\(N\),字符串\(s\),问有多少种方法经过\(N\)次操作后得到字符串\(S\)思路最开始在想三维dp,虽然发现了性质,但是没想到很好的用法重要性质:答案与字符串内容无关,仅与字符串长度有关定义\(f_{i,j}\)为操作\(i......
  • wps数据分析000002
    目录一、快速定位技巧二、快速选中技巧全选选中部分区域选中部分区域(升级版)三、快速移动技巧四、快速录入技巧五、总结一、快速定位技巧ctrl+→(上下左右)快速定位光标对准单元格的上下部分双击名称单元格中输入二、快速选中技巧全选先把光标定位到数据区域,ctrl+A......
  • VP AtCoder Beginner Contest 382
    A-DailyCookie题意:有\(n\)个盒子,有些盒子有蛋糕,被人吃了\(m\)个蛋糕,问有几个盒子没蛋糕。直接计算即可。点击查看代码voidsolve(){intn,m;std::cin>>n>>m;std::strings;std::cin>>s;std::cout<<n-std::count(s.begin(),s.end(),......
  • AtCoder Regular Contest 058 [ARC058] E - Iroha and Haiku
    题意:对于所有长度为\(n\),每个数在1到10之间的序列,问有多少个中包含一字串,满足字串可以分为三段和恰好为\(x,y,z\)的部分数据满足:\[3\len\le40,1\lex\le5,1\ley\le7,1\lez\le5,\]思路正向统计有多少个序列满足会遇到重复统计的问题,难以克服,考虑统计统......