2025 年 1 月USACO竞赛金奖组问题一—Median Heap

**Note: The time limit for this problem is 4s, twice the default.**

Farmer John has a binary tree with N nodes where the nodes are numbered from 1 to N (1≤N<2⋅105 and N is odd). For i>1, the parent of node i is ⌊i/2⌋. Each node has an initial integer value ai, and a cost ci to change the initial value to any other integer value (0≤ai,ci ≤109).

He has been tasked by the Federal Bovine Intermediary (FBI) with finding an approximate median value within this tree, and has devised a clever algorithm to do so.

He starts at the last node N and works his way backward. At every step of the algorithm, if a node would not be the median of it and its two children, he swaps the values of the current node and the child value that would be the median. At the end of this algorithm, the value at node 1 (the root) is the median approximation.

The FBI has also given Farmer John a list of Q (1≤Q≤2⋅105) independent queries each specified by a target value m (0≤m≤109). For each query, FJ will first change some of the node's initial values, and then execute the median approximation algorithm. For each query, determine the minimum possible total cost for FJ to make the output of the algorithm equal to m.

INPUT FORMAT (input arrives from the terminal / stdin):

The first line of input contains N.

The next N lines each contain two integers ai and ci.

The next line contains Q.

The next Q lines each contain a target value m.

OUTPUT FORMAT (print output to the terminal / stdout):

Output Q lines, the minimum possible total cost for each target value m.

SAMPLE INPUT:

5
10 10000
30 1000
20 100
50 10
40 1
11
55
50
45
40
35
30
25
20
15
10
5

SAMPLE OUTPUT:

111
101
101
100
100
100
100
0
11
11
111

To make the median approximation equal 40, FJ can change the value at node 3 to 60. This costs c3=100.

To make the median approximation equal 45, FJ can change the value at node 3 to 60 and the value at node 5 to 45. This costs c3+c5=100+1=101.

SCORING:

Inputs 2-4: N,Q≤50
Inputs 5-7: N,Q≤1000
Inputs 8-16: No additional constraints

Problem credits: Suhas Nagar and Benjamin Qi

扫码领取USACO试题答案+详细解析

咨询一对一备赛规划

2025 年 1 月USACO竞赛白金组问题三— Watering the Plants

Bessie's garden has N plants labeled 1 through N(2≤N≤5⋅105) from left to right. Bessie knows that plant i requires at least wi (0≤wi≤106) units of water.

Bessie has a very peculiar irrigation system with N−1 canals, numbered 1 through N−1. Each canal i has an associated unit cost ci (1≤ci≤106), such that Bessie can pay cik to provide plants i and i+1 each with k units of water, where k is a non-negative integer.

Bessie is busy and may not have time to use all the canals. For each 2≤iN compute the minimum cost required to water plants 1 through i using only the first i−1 canals.

INPUT FORMAT (input arrives from the terminal / stdin):

The first line contains a single positive integer N.

The second line contains N space-separated integers w1,…,wN.

The third line contains N−1 space-separated integers c1,…,cN−1.

OUTPUT FORMAT (print output to the terminal / stdout):

Output N−1 newline-separated integers. The (i−1)th integer should contain the minimum cost to water the first i plants using the first i−1 canals.

SAMPLE INPUT:

3
39 69 33
30 29

SAMPLE OUTPUT:

2070
2127

The minimum cost to water the first 2 plants using the first canal is to pay 30⋅69=2070 by using the first canal 69 times.

The minimum cost to water the first 3 plants is to use the first canal 39 times and the second canal 33 times, paying 39⋅30+29⋅33=2127.

SAMPLE INPUT:

3
33 82 36
19 1

SAMPLE OUTPUT:

1558
676

SAMPLE INPUT:

8
35 89 44 1 35 3 62 50
7 86 94 62 63 9 49

SAMPLE OUTPUT:

623
4099
4114
6269
6272
6827
8827

SCORING:

Input 4: N≤200, and all wi ≤200.
Inputs 5-6: All wi ≤200.
Inputs 7-10: N≤5000.
Inputs 11-14: All wi and ci are generated independently and uniformly at random.
Inputs 15-19: No additional constraints.

Problem credits: Benjamin Qi

扫码领取USACO试题答案+详细解析

咨询一对一备赛规划

2025 年 1 月USACO竞赛白金组问题二— Shock Wave

Bessie is experimenting with a powerful hoof implant that has the ability to create massive shock waves. She has N (2≤N≤105) tiles lined up in front of her, which require powers of at least p0,p1,…,pN−1 to break, respectively (0≤pi≤1018).

Bessie can apply power by punching a specific tile but due to the strange nature of her implant, it will not apply any power to the tile she punches. Instead, if she chooses to punch tile x once, where x is an integer in [0,N−1], it applies |ix| power to tile i for all integers i in the range [0,N−1]. This power is also cumulative, so applying 2 power twice to a tile will apply a total of 4 power to the tile.

Please determine the fewest number of punches required to break all the tiles.

INPUT FORMAT (input arrives from the terminal / stdin):

The first line contains T(1≤T≤100) representing the number of test cases.

Line 2t contains a single integer N, the number of tiles in test case t.

Line 2t+1 contains N space separated numbers p0,p1,…,pN−1 representing that tile i takes ppower to be broken.

It is guaranteed that the sum of all N in a single input does not exceed 5⋅105.

OUTPUT FORMAT (print output to the terminal / stdout):

T lines, the ith line representing the answer to the ith test case.

SAMPLE INPUT:

6
5
0 2 4 5 8
5
6 5 4 5 6
5
1 1 1 1 1
5
12 10 8 6 4
7
6 1 2 3 5 8 13
2
1000000000000000000 1000000000000000000

SAMPLE OUTPUT:

2
3
2
4
4
2000000000000000000

For the first test, the only way for Bessie to break all the tiles with two punches is to punch 0 twice, applying total powers of [0,2,4,6,8] respectively.

For the second test, one way for Bessie to break all the tiles with three punches is to punch 0, 2, and 4 one time each, applying total powers of [6,5,4,5,6] respectively.

For the third test, one way for Bessie to break all the tiles with two punches is to punch 0 and 1 one time each, applying total powers of [1,1,3,5,7] respectively.

SCORING:

Input 2: All pi are equal.
Inputs 3-6: N≤100
Inputs 7-14: No additional constraints.

Problem credits: Suhas Nagar

扫码领取USACO试题答案+详细解析

咨询一对一备赛规划

USACO竞赛考试网-二维码

2025 年 1 月USACO竞赛白金组问题一—DFS Order

Bessie has a simple undirected graph with vertices labeled 1…N(2≤N≤750). She generates a depth-first search (DFS) order of the graph by calling the function dfs(1), defined by the following C++ code. Each adjacency list (adj[i] for all 1≤iN) may be permuted arbitrarily before starting the depth first search, so a graph can have multiple possible DFS orders.

vector<bool> vis(N + 1);
vector<vector<int>> adj(N + 1); // adjacency list
vector<int> dfs_order;

void dfs(int x) {
if (vis[x]) return;
vis[x] = true;
dfs_order.push_back(x);
for (int y : adj[x]) dfs(y);
}

You are given the initial state of the graph as well as the cost to change the state of each edge. Specifically, for every pair of vertices (i,j) satisfying 1≤i<jN, you are given an integer ai,j(0<|ai,j|≤1000) such that

If ai,j >0, edge (i,j) is not currently in the graph, and can be added for cost ai,j.
If ai,j<0, edge (i,j)is currently in the graph, and can be removed for cost −ai,j.

Determine the minimum total cost to change the graph so that [1,2…,N]
is a possible DFS ordering.

INPUT FORMAT (input arrives from the terminal / stdin):

The first line contains N.

Then N−1 lines follow. The j−1
th line contains a1,j ,   a2,j,…,aj−1,j separated by spaces.

OUTPUT FORMAT (print output to the terminal / stdout):

The minimum cost to change the graph so that [1,2,…,N]
is a possible DFS ordering.

SAMPLE INPUT:

4
1
2 3
40 6 11

SAMPLE OUTPUT:

10

Initially, the graph contains no edges. (1,2),(2,3),(2,4)
can be added for a total cost of 1+3+6. The graph now has two possible DFS orderings: [1,2,3,4],[1,2,4,3].

SAMPLE INPUT:

5
-1
10 -2
10 -7 10
-6 -4 -5 10

SAMPLE OUTPUT:

5

Initially, the graph contains edges (1,2),(2,3),(2,4),(1,5),(2,5),(3,5). Edge (3,5) can be removed for a cost of 5.

SAMPLE INPUT:

4
-1
-2 300
4 -5 6

SAMPLE OUTPUT:

9

Initially, the graph contains edges (1,2),(1,3),(2,4). Edge (2,4)
can be removed and edge (1,4) can be added for a total cost of 5+4=9.

SCORING:

Inputs 4-9: All ai,j >0
Inputs 10-16: N≤50
Inputs 17-23: No additional constraints.

Problem credits: Benjamin Qi

扫码领取USACO试题答案+详细解析

咨询一对一备赛规划

高含金量热门国际竞赛!0基础学生如何准备USACO?

USACO - 美国计算机奥林匹克竞赛,向全球选手开放,任何对编程有浓厚兴趣的人都可以免费注册并参与其中。其公平的晋级机制与高质量的竞赛题目,使得USACO成为了众多算法爱好者和信奥选手追逐的目标。不论是在学术领域还是在日益发展的工业应用中,计算机科学的地位愈发重要。

0基础学生准备USACO逐步进阶计划

1-2年级:兴趣培养期

目标:激发对编程的兴趣,理解基本逻辑结构。

语言:Scratch

必备知识:

  - 掌握顺序执行、条件判断和循环执行的逻辑结构。

  - 学习变量、函数、列表的概念。

  - 理解广播、克隆原理。

  - 初步了解搜索算法(如线性查找)。

竞赛:参与适合初学者的白名单赛事,例如CIE。

3-4年级:开启竞赛预备期

目标:熟悉编程语言,开始为竞赛做准备。

语言:Python

必备知识:

  - Python基础语法,包括变量库、模块函数、列表等。

  - 复杂应用的循环和条件语句。

  - 简单图形界面编程(如使用turtle库),游戏开发基础(如pygame库)。

竞赛:继续参与白名单赛事,进一步了解信奥和其他相关竞赛。

5-6年级:USACO入门期

目标:正式开始准备USACO竞赛。

语言:C++

必备知识:

  - C++标准的认识,程序输入输出。

  - 分支与循环语句,二维数组,浮点数操作,字符处理。

竞赛:参加USACO青铜级别比赛,以及其他白名单赛事。

7-8年级:USACO铜升银期

目标:努力在USACO中从青铜级提升到白银级。

语言:C++

必备知识:

  - 深入学习变数、循环、条件语句、函数/方法。

  - 集合、字典/哈希表的应用。

竞赛:专注于USACO白银级别的题目练习,同时参与其他竞赛。

9年级:USACO银升金期

目标:在USACO中从白银级提升到黄金级。

语言:C++

必备知识:

  - 图和树的数据结构。

  - 堆栈、队列和优先级队列。

  - 二分查找、深度优先搜索(DFS)、广度优先搜索(BFS)。

  - 其他高级主题如滑动窗口、前缀和等。

竞赛:重点放在USACO黄金级别的题目上,并尝试解决更复杂的挑战。

10-11年级:USACO金升铂金期

目标:最终目标是在USACO中从黄金级晋升至铂金级。

语言:C++

必备知识:

  - 动态规划、图论中的最短路径和最小生成树算法。

  - 不相交集(并查集)、字符串算法、几何算法。

  - 熟悉Dijkstra, Prim, Kruskal等经典算法。

  - 学习高级数据结构如二叉索引树(BIT)或树状数组。

竞赛:全力以赴准备USACO铂金级别的比赛,争取最佳成绩。

【扫码免费领取】USACO真题+备赛书单+一对一备考规划!

预约最新真题讲座、课程详情可扫码咨询⇓

思维导图

USACO本周五即将开赛!USACO竞赛难度分析!

USACO(美国计算机奥林匹克竞赛)以其独特的命题标准和对参赛者逻辑推理、问题解决能力的重视而著称。它与国内的NOIP(全国青少年信息学奥林匹克联赛)在难度上有一定的对应关系,但USACO更强调算法思维深度而非复杂算法知识的记忆,这使得它成为一个更加注重智慧运用的竞技场。

第二场比赛: 2025年1月24日至27日

USACO竞赛难度分析

总体难度特点

算法思维为核心:USACO的比赛设计旨在评估参赛者的算法思维能力和解决问题的智慧,而不是简单地测试他们对高级算法结构的记忆。

逻辑推理与创造力:比赛题目通常要求参赛者能够灵活应用所学知识,创造性地构思解决方案,并优化算法以适应严格的运行时间和内存限制。

编程语言多样性:支持多种编程语言(如C++、Python、Java等),其中C++由于其性能优势和广泛使用,成为许多选手的选择;Python则因其易用性和丰富的库支持受到欢迎。

从铜级到银级

新手友好:对于编程新手来说,升至白银级别相对较为容易。只要掌握了基础编程概念和简单的算法技巧,如循环、条件判断、数组操作以及基本搜索算法等,就能顺利通过这一阶段。

多语言支持:USACO允许使用多种编程语言参赛,为不同背景的学生提供了平等的机会。

从银级到金级

数据结构与算法基础:虽然从白银升至黄金级别的难度有所增加,但对于已经掌握了一定编程技能的学生而言仍然是可实现的目标。此阶段需要学生深入理解基础数据结构(如链表、栈、队列、树、图等)以及一些经典的算法(如排序、查找、贪心算法、递归等)。

系统复习与实践:零基础的学生可能需要更多时间来系统复习相关知识点,但只要有足够的练习和经验积累,也是可以逐步提升自己的水平的。

从金级到铂金级

挑战性显著提高:这是USACO中最难的一个阶段,不仅要求极高的编程熟练度,还需要深厚的算法理论基础。参赛者必须能够快速识别问题的本质,并在有限的时间内找到高效的解决方案。

灵活算法思维:铂金级别的题目往往没有唯一的解法,甚至可能存在多个可行的答案。因此,拥有灵活的算法思维和创新能力是关键所在。参赛者需要能够在短时间内做出最佳选择,并确保算法的效率满足题目要求。

【扫码免费领取】USACO真题+备赛书单+一对一备考规划!

预约最新真题讲座、课程详情可扫码咨询⇓

思维导图

爬藤神器!USACO不同级别需要掌握哪些知识点?

美国信息学奥林匹克竞赛是一个具有国际声誉的计算机编程与算法竞赛。与中国的全国信息学奥林匹克(NOI)系列赛事相比较,USACO不仅在美国地区享有很高的知名度,同时也面向全球的编程爱好者开放,旨在为有志于计算机科学的学生提供一个提升自我的平台。

USACO是一个针对中学生的信息学竞赛,分为四个级别:青铜级、白银级、黄金级和铂金级。每个级别都有其特定的知识点和技术要求,随着级别的升高,难度也逐渐增加。

USACO不同级别需要掌握哪些知识点?

Bronze 青铜级

编程基础:掌握至少一种编程语言(如C++、Java或Python),并能编写简单的程序。

基本概念:理解如何使用数组进行数据处理,以及如何通过多重循环遍历数据结构。

算法初步:熟悉枚举算法、深度优先搜索(DFS)等基础算法,并能应用到简单的问题解决中。

问题格式适应:能够理解和适应USACO问题的输入输出格式。

Silver 白银级

数据结构与算法:掌握基本的数据结构(如链表、栈、队列)和一些简单的算法(如排序、查找)。

代码优化:开始关注代码效率,确保程序能在给定的时间和内存限制内完成运行。

算法技巧:学习贪心算法、递归、动态规划中的递推关系、二分查找、前缀和等算法技巧。

Gold 黄金级

高级数据结构:深入理解树、图等复杂数据结构及其操作。

高级算法:掌握动态规划、更复杂的图论算法(如最短路径、最小生成树)、字符串处理算法等。

性能分析:了解时间复杂度和空间复杂度的概念,能够在设计算法时考虑这些因素以提高效率。

Platinum 铂金级

专业级技能:具备非常扎实的编程基础,对各种高级数据结构(如线段树、平衡树)和算法有深入了解。

数学知识:在某些问题中可能需要应用到数论、组合数学等方面的知识。

创新解题能力:面对难题时能够提出新颖有效的解决方案,同时保证算法的高效性。

零基础参赛选手可以从青铜级开始,逐步提升自己的编程能力和算法知识,不断挑战更高一级别的题目。实践是关键,定期练习过往的比赛题目可以帮助你更好地理解和掌握所需的知识点。

【扫码免费领取】USACO真题+备赛书单+一对一备考规划!

预约最新真题讲座、课程详情可扫码咨询⇓

思维导图

USACO竞赛与国类竞赛类比!USACO竞赛有何亮点?

参与USACO竞赛的学生,通常拥有更强的编程及算法能力,这对于申请名校的过程中无疑是一项重要的加分项。USACO的奖项也是进入世界顶尖大学(如麻省理工学院)的敲门砖。

难度级别与国内竞赛类比

青铜——CSP入门级- 

白银——CSP提高级- 

黄金——NOIP

铂金——NOI- 

难度等级与美国数学竞赛类比

青铜——AMC10/AMC12

白银——AIME

黄金——USAJMO

铂金——USAMO

USACO竞赛亮点

(1)高水平竞赛平台

高质量赛题:USACO以其精心设计的赛题著称,这些题目不仅考察选手的编程能力,还测试他们解决复杂问题的能力和创造性思维。

全球视野:参与者可以与来自世界各地的优秀同龄人竞争,这有助于他们了解自己的水平,并激发进一步学习的动力。

(2)丰富的题库资源

多样化的练习机会:USACO拥有一个庞大的在线题库,包含从基础到高级的各种难度级别的题目,适合不同阶段的学习者。

详细的反馈机制:每道题目都有官方提供的解答和解释,以及自动评测系统给出的反馈,帮助参赛者快速定位并改正错误,促进自我提升。

(3)明确的晋级机制

清晰的晋升路径:USACO采用分级制度(青铜、白银、黄金、铂金),每次比赛后根据表现自动调整级别,激励选手不断挑战更高层次的问题。

公平的竞争环境:这种基于成绩的动态升级方式确保了所有参赛者都在一个公平透明的环境中竞争。

(4)提升申请竞争力

名校认可度高:在USACO取得优异成绩对于申请美国顶尖大学特别是那些以工程和技术闻名的院校如MIT、Stanford等是非常有帮助的。许多理工科专业都对USACO的成绩给予高度重视。

个人能力证明:成功完成USACO的不同级别不仅是编程技能的体现,也是逻辑思维能力和解决问题能力的良好证明,这些都是高校招生时所看重的素质。

参加USACO不仅可以提高个人的技术水平,还能为未来的学术和职业发展打下坚实的基础。对于有兴趣深入探索计算机科学领域或者计划申请国外知名学府的学生来说,这是一个不可多得的机会。

【扫码免费领取】USACO真题+备赛书单+一对一备考规划!

预约最新真题讲座、课程详情可扫码咨询⇓

思维导图

计算机专业的王牌竞赛!USACO竞赛比赛规则&晋级规则说明!

USACO是一个极具吸引力的计算机竞赛平台,不仅了一个公平的竞技环境,还能极大地提升参与者的算法与编程能力。无论你是新手还是有经验的选手,参与USACO都能够为你的学习与未来的职业发展铺平道路。

USACO比赛规则

时间限制与试题提交

每场比赛持续4小时。选手可以在比赛开始后的任意时间内登录自己的USACO账号并打开试题,一旦打开试题,计时即刻开始。

一套试题通常包含3到4个问题,选手需要在这段时间内完成编程并将程序通过网络提交给官方服务器。

程序评测与语言选择

提交后,系统会使用测试用例(test case)来评估程序的正确性和效率,并据此给出分数。

支持多种编程语言,包括C++、Java、Python、Pascal和C等。对于希望未来冲击USACO训练营(Camp)的选手,建议优先考虑学习和使用C++,因为它是比赛中最常用的语言,性能也相对较好。

灵活的比赛窗口

每次比赛有一个为期4天的比赛窗口,在此期间,选手可以选择任何合适的时间段来参加比赛。

即时晋级机制

如果在规定时间内达到了接近满分或满分的成绩,系统会立即通知选手晋级,并允许他们在接下来的几天里继续挑战更高一级别的比赛。这意味着实力强劲的选手可以在同一轮比赛中连续升级,直到达到最高级别——铂金级。

晋级规则

逐级晋升:选手必须按照青铜、白银、黄金和铂金的顺序依次晋级,不能跳过任何一个级别。

连续晋级机会:如果选手表现出色,可以在一次比赛中连续晋升多个级别,只要他们的表现足够优秀。

铂金级之后:对于已经达到铂金级别的选手,他们可以继续参赛以提高排名,甚至争取进入美国国家集训队的机会,这是为顶尖选手准备的进一步培训项目。

备赛建议

提前准备:为了最大化利用时间,建议选手不要等到通过一个级别后再开始准备下一个级别的内容。相反,应该尽早接触更高级别所需的知识和技术,以便更好地应对可能的快速晋升。

【扫码免费领取】USACO真题+备赛书单+一对一备考规划!

预约最新真题讲座、课程详情可扫码咨询⇓

思维导图

USACO计算机竞赛分几个等级?不同级别的参赛资格和难度如何?

在这样一个快速发展的科技时代,提升自己的信息学能力将会有助于在学术界和职场中获得更多的机会。美国信息学奥林匹克(USA Computing Olympiad,简称USACO)是由美国官方举办的中学生计算机编程与算法线上活动,是最负盛名的国际计算机竞赛之一。

USACO计算机竞赛分几个等级?不同级别的参赛资格和难度如何?

USACO(美国计算机奥林匹克竞赛)分为四个不同的级别,每个级别的参赛资格和难度要求如下:

青铜级别

参赛资格:所有新注册的选手自动从青铜级开始。

难度等级:主要面向初学者,题目设计较为简单,旨在帮助选手熟悉USACO的比赛格式和编程技巧。只要具备基本的编程知识,并能用至少一种编程语言编写程序,大多数选手都能在这个阶段取得不错的成绩并晋级到下一级别。

白银级别

参赛资格:通过青铜级比赛的选手。

难度等级:在这一级别,除了需要掌握基础的数据结构(如数组、链表等),还需要了解一些简单的算法概念,比如贪心算法、递归搜索、二分查找等。此外,代码效率变得更为重要,因为题目可能会对时间和空间复杂度提出更高的要求。

黄金级别

参赛资格:通过白银级比赛的选手。

难度等级:到了这个级别,问题变得更加抽象和复杂,涉及到更高级别的算法和技术,例如最短路径算法、动态规划等。同时,对于数据结构的理解也需更加深入,能够熟练运用树、图等结构解决问题。

铂金级别

参赛资格:通过黄金级比赛的选手。

难度等级:这是USACO的最高级别,要求选手不仅要有深厚的编程功底,还要对各种高级算法有深刻的理解。某些问题可能没有唯一的解决方案,甚至可能存在多种有效的优化策略。因此,在铂金级别,解决问题的能力、创新思维以及高效的算法设计都至关重要。

晋级机制

逐级晋升:选手必须按照青铜 -> 白银 -> 黄金 -> 铂金的顺序依次晋级,不可跳级。

即时晋级:如果在比赛中表现优异,可以立即获得晋级通知,并有机会在同一轮比赛中继续挑战更高一级别的题目。这意味着实力强大的选手有可能在一次比赛中连续升级至铂金级别。

【扫码免费领取】USACO真题+备赛书单+一对一备考规划!

预约最新真题讲座、课程详情可扫码咨询⇓

思维导图