Atcoder 题目整理

Work in Progress

筛选条件

找到 854 个题目

abc200_c

138
modular arithmeticcountingcombinatoricsimplementation

解题思路:

对每个数取模200,统计每个余数的出现次数。对于相同余数的数,任意两个的差都是200的倍数,所以答案是所有余数组合数C(count,2)的和。

abc200_d

1217
combinatoricsmodular arithmeticbrute forcepigeonhole principle

解题思路:

枚举所有可能的子序列组合,计算每个子序列元素和模200的余数。利用鸽笼原理,当子序列数量足够多时,必然存在两个不同子序列具有相同的模200余数。

abc201_c

439
brute forceimplementationenumeration

解题思路:

枚举所有可能的四位数字组合(0000-9999),对每个组合统计各数字出现次数,检查是否满足记忆条件:'o'表示必须出现,'x'表示不能出现,'?'表示可出现可不出现。

abc201_d

1317
dynamic programminggame theoryminimaxgrid traversal

解题思路:

使用动态规划求解博弈问题。从终点向起点逆推,计算每个位置的最优得分差。当前玩家会选择对自己最有利的移动方向,最终比较起点的得分差确定胜负。

abc201_e

1694
treesdfsbit manipulationXORcombinatoricsmodular arithmetic

解题思路:

用DFS求出每个点到根的XOR距离,两点间距离为它们到根距离的XOR。按位统计贡献:第i位为1的点数乘以为0的点数乘以2^i

abc202_c

130
implementationcountingarraysfrequency counting

解题思路:

统计每个A[i]的出现次数,然后对每个j计算B[C[j]]的值,累加对应A值的出现次数即可得到满足A[i]=B[C[j]]的配对总数。

abc202_d

966
combinatoricsgreedyimplementation

解题思路:

贪心构造字典序第K小的字符串。每次选择当前位置的字符时,计算选择'a'能产生的组合数,如果K大于该数则选择'b'并更新K,否则选择'a'。

abc202_e

1638
treesdfssegment treesmall to largemerge

解题思路:

对每个节点维护其子树中所有节点深度的信息,使用线段树合并优化。DFS遍历树,对每个节点建立权值线段树记录子树内各深度的节点数,自底向上合并子节点信息,查询时在对应节点的线段树中查询指定深度的节点数。

abc203_c

54
greedysimulationsorting

解题思路:

按村庄编号排序朋友位置,模拟太郎的移动过程。每次移动到下一个有朋友的村庄,收集所有朋友给的钱,然后继续前进直到钱用完。

abc203_d

1622
binary search2d prefix sumsliding windowimplementation

解题思路:

二分答案,用二维前缀和快速计算每个K×K区域内小于mid的元素个数,判断是否存在区域的中位数≤mid

abc203_e

1750
implementationsimulationdata structuressetmap

解题思路:

使用set维护白棋可达位置集合。按行遍历黑棋,根据三种移动规则更新可达位置:向前需要该位置无黑棋,斜向移动需要目标位置有黑棋。

abc204_c

629
graph theorybfsreachabilitydirected graph

解题思路:

对每个起点城市执行BFS,计算从该城市能到达的所有城市数量。将所有起点的可达城市数量相加即为答案。本质是计算有向图中所有可达的(起点,终点)对数。