2023年USACO竞赛考情回顾!今年公开赛考察什么内容?USACO竞赛试题详解!

时间:2023-06-06 10:11:20  作者:犀牛教育 来源:犀牛教育

USACO的全称是USA Computing Olympiad,即美国计算机奥林匹克竞赛。USACO类似于中国的NOI,是美国中学生计算机方向最顶级的学科竞赛,比赛的最终目的是为了选拔计算机方面的人才,入选美国国家队,参加国际信息学奥林匹克竞賽IOI。 

 
那么USACO竞赛考察什么题目呢?李老师为大家整理了今年USACO竞赛公开赛考试题目,需要的同学可以咨询李老师免费领取噢~(更多USACO竞赛课程,详情咨询微信:X-NEW999
 

图片

 

更多国际竞赛课程

可扫码咨询李老师

图片

TEL:16601876765
 
图片

01

图片

USACO公开赛铜牌三大考题

 

图片P1 FEB
Bessie and Elsie are plotting to overthrow Farmer John at last! They plan it out over (1 <= N <= 2 * 10 ** 5) text messages. Their conversation can be represented by a string S of length N where Is is either B or E, meaning the ith message was sent by Bessie or Elsie, respectively.

However, Farmer John hears of the plan and attempts to intercept their conversation. Thus, some letters of S are F, meaning Farmer John obfuscated the message and the sender is unknown.
The excitement level of a non-obfuscated conversation is the number of times a cow double-sends - that is, the number of occurrences of substring BB or EE in S. You want to find the excitement level of the original message, but you don’t know which of Farmer John’s messages were actually Bessie’s / Elsie’s. Over all possibilities, output all possible excitement levels of S.

INPUT FORMAT (input arrives from the terminal / stdin):
The first line will consist of one integer N.
The next line contains S

OUTPUT FORMAT (print output to the terminal / stdout):
First output K, the number of distinct excitement levels possible. On the next K lines, output the excitement levels, in increasing order.

SAMPLE INPUT:
4
BEEF

SAMPLE OUTPUT:
2
1
2

SAMPLE INPUT:
9
FEBFEBFEB
SAMPLE OUTPUT:
2
2
3
SAMPLE INPUT:
10
BFFFFFEBFE
SAMPLE OUTPUT:
3
2
4
6
SCORING:
•Inputs 4-8: N ≤ 10
•Inputs 9-20: No additional constraints.
 
图片P2 MOO LANGUAGE
Farmer John is interested in better interacting with his fellow cows, so he decided he will learn the moo language!
Moo language is actually quite similar to English, but more minimalistic. There are only four types of words: nouns, transitive verbs, intransitive verbs, and conjunctions. Every two consecutive words must be separated by a space. There are also only two types of punctuation: periods and commas. When a period or comma appears after a word, it appears directly after the word, and is then followed by a space if another word appears next.
A sentence needs to follow one of the following formats:
•Type 1: noun + intransitive verb.
•Type 2: noun + transitive verb + noun(s). Specifically, at least one noun must follow the transitive verb, and there must be a comma in front of every following noun besides the first following noun.
Two sentences may be joined into a compound sentence if a conjunction is placed in between them. The resulting compound sentence cannot be further joined with other sentences or other compound sentences. Every sentence (or compound sentence, if two sentences are joined) must end with a period.
Farmer John has a word bank of N words, C commas, and P periods (
1≤ P,C ≤N≤10 ** 3). He may only use a word or punctuation mark as many times as it appears in the word bank. Help him output a sequence of sentences containing the maximum possible number of words.
Each input file contains T (1≤T≤100) independent instances of this problem.
INPUT FORMAT (input arrives from the terminal / stdin):
The first line contains T, the number of instances. Each instance is specified as follows:
The first line consists of three integers, N, C, and P.
The N following lines will consist of two strings. The first string will be the word itself that FJ can use (a string of at least 1 and at most 10 lowercase letters), and the second string will be either one of the following: noun, transitive-verb, intransitive-verb, or conjunction, denoting the type of the word. It is possible the same word occurs more than once in FJ's word bank, but it will always have the same type each time it appears.

OUTPUT FORMAT (print output to the terminal / stdout):
In the first line, output the maximum possible number of words.
In the second line, output any sequence of sentences with the maximum possible number of words. Any valid sequence will be accepted.
The grader is sensitive to whitespace, so make sure not to output any extraneous spaces, particularly at the end of each line.
SAMPLE INPUT:
3
1 1 1
bessie noun
10 5 4
bessie noun
taught transitive-verb
flew intransitive-verb
elsie noun
farmer noun
john noun
and conjunction
and conjunction
nhoj noun
mooed intransitive-verb
24 5 4
but conjunction
bessie noun
taught transitive-verb
flew intransitive-verb
elsie noun
farmer noun
john noun
and conjunction
and conjunction
nhoj noun
mooed intransitive-verb
bob noun
impressed transitive-verb
cow noun
impressed transitive-verb
leaped intransitive-verb
elsie noun
bella noun
buttercup noun
pushed transitive-verb
mooed intransitive-verb
envy noun
john noun
nhoj noun
SAMPLE OUTPUT:
0
9
nhoj mooed. farmer taught elsie, bessie and john flew.
23
nhoj mooed. nhoj impressed john, farmer, elsie, bessie and cow impressed bob. bella pushed elsie and buttercup flew. envy mooed but john leaped.
For the first test case, the only valid sequence is the empty sequence. For each of the next two test cases, it is possible to construct a sequence of sentences using every word from the word bank except for one.
SCORING:
•Inputs 2-6: N≤10
•Inputs 7-11: N≤100
•Inputs 12-16: N≤1000
•Inputs with remainder 2 when divided by 5: There are no transitive verbs.
•Inputs with remainder 3 when divided by 5: There are no intransitive verbs.
•Inputs with remainder 4 when divided by 5: There are no conjunctions.

 

图片P3 ROTATE AND SHIFT
**Note: The time limit for this problem is 4s, 2x the default.**
To celebrate the start of spring, Farmer John's N cows (1≤N≤2⋅10**5) have invented an intriguing new dance, where they stand in a circle and re-order themselves in a predictable way.
Specifically, there are N positions around the circle, numbered sequentially from 0 to N - 1, with position 0 following position N - 1.  A cow resides at each position. The cows are also numbered sequentially from 0 to N - 1.
Initially, cow i starts in position i. You are told a set of K positions  0 = A1 < A2 < … < Ak < N that are "active", meaning the cows in these positions are the next to move (1 <= K <= N).
In each minute of the dance, two things happen. First, the cows in the active positions rotate: the cow at position A1 moves to position A2, the cow at position A2 moves to position A3, and so on,  with the cow at position Ak moving to position A1. All of All of these K moves happen simultaneously,  so the after the rotation is complete, all of the active positions still contain exactly one cow. Next, the active positions themselves shift: A1 becomes A1 + 1, A2 becomes A2 + 1, and so on(if Ai = N -1 for some active position, then Ai circles back around to 0).
Please calculate the order of the cows after T minutes of the dance (1≤T≤10**9).
INPUT FORMAT (input arrives from the terminal / stdin):
The first line contains three integers N, K, and T.
The second line contains K  integers representing the initial set of active positions A1,A2,…Ak.  Recall that A1 = 0  and that these are given in increasing order.

OUTPUT FORMAT (print output to the terminal / stdout):
Output the order of the cows after T minutes, starting with the cow in position 0, separated by spaces.

SAMPLE INPUT:
5 3 4
0 2 3
SAMPLE OUTPUT:
1 2 3 4 0
For the example above, here are the cow orders and A for the first four timesteps:
Initial, T = 0: order = [0 1 2 3 4], A = [0 2 3]
T = 1: order = [3 1 0 2 4]
T = 1: A = [1 3 4]
T = 2: order = [3 4 0 1 2]
T = 2: A = [2 4 0]
T = 3: order = [2 4 3 1 0]
T = 3: A = [3 0 1]
T = 4: order = [1 2 3 4 0]
SCORING:
•Inputs 2-7: N≤1000,T≤10000
•Inputs 8-13: No additional constraints.

 

USACO OPEN,今年考情如何?
 

犀牛USACO竞赛辅导石老师认为:

 

本次USACO公开赛铜牌考试还是以暴力搜索和模拟为主,尤其是第二题,需要仔细审题,该题也比较有意思,结合了语言中的语法知识,很多学生很容易在这里犯懵。如果不仔细理解题意,很有可能连题都看不懂。


本次考试1,2题都有考察到字符串的知识点,如果对与字符串知识点不了解的学生就要多加小心了。
 

通常USACO OPEN的考试难度比一般月赛要难一些,并且考试时长为五小时(月赛为4小时),对学生来说是一大考验。

 

图片

 

 

图片

USACO美国公开赛(铜牌考题解析)

 

考题1:

 

# P1

 

考虑每一段"XFF...FFY"可以产生多少贡献,

 

结论是如果X=Y,能产生0,2,4,6,...的贡献,

 

否则能产生1,3,5,7,...的贡献,

 

对于下面的情况 整体减一可以得到和上面一样的结论。

 

再考虑边缘,FF...FFY可以产生多少贡献?

 

发现能产生0,1,2,...的贡献,

 

于是我们可以分别统计这两种,加上初始答案即可。

 

图片考察知识点: 分类讨论

 

考题2:

 

# P2

 

(分类讨论题)

 

首先我们可以去考虑conjunction的数量,这个不能超过.的数量;

 

其次考虑单词的数量,这个不能超过conjunction的数量+.的数量;

 

然后我们可以通过枚举transitive-verb的数量和intransitive-verb的数量来确定单词的最多个数;

 

最后我们依次将单词拼接在一起即可。

 

图片考察知识点:  模拟

 

考题3:

 

# P3

 

考虑一个位置上的值p假如从a[i]变成a[i+1],那么下一次对他进行变化一定是由当前a[i]移动过去造成的,

 

所以每个点的运动都具有周期性,每经过t秒,就会往后移动t的距离。

 

其中t=a[i+1]-a[i],特殊的,我们令a[k+1]=a[1]+n

 

图片考察知识点 :周期性的发现

 

《USACO公开赛铜牌考题》答案

图片铜牌第一题:
#include <iostream>

 

using namespace std;

#define rep(i,h,t) for (int i=h;i<=t;i++)

#define dep(i,t,h) for (int i=t;i>=h;i--)

int n;

char s[200010];

bool t[200010];

int main()

{

    scanf("%d",&n);

    scanf("%s",s+1);

    int O=0;

    rep(i,1,n)

      if (s[i]==s[i-1]&&s[i]!='F') O++;

    

    int Q1=0,Q2=0;

    rep(i,1,n)

    {

        if (s[i]=='F')

        {

            int j=i;

            while (s[j]=='F'&&j<=n) j++;

        

            j--;

            int num=j-i+1;

            if (i!=1&&j!=n)

            {

                if (s[i-1]==s[j+1]) num++;

                O+=num%2;

                Q1+=num/2;

            } else Q2+=num;

            i=j;

        }

    }

    

    rep(i,0,Q1)

      rep(j,0,Q2)

        t[i*2+j+O]=1;

    int OO=0;

    rep(i,0,n-1)

      if (t[i]) OO++;

    cout<<OO<<endl;

    rep(i,0,n-1)

      if (t[i]) cout<<i<<endl;

    return 0;

}


图片
铜牌第二题:

#include <iostream>

#include <vector>

#define rep(i,h,t) for (int i=h;i<=t;i++)

#define dep(i,t,h) for (int i=t;i>=h;i--)

using namespace std;

struct nd{

    int a,b,c,d;

    bool operator <(const nd x)const{

        return d>x.d;

    }

};

int main()

{

    int T;

    cin>>T;

    while (T--)

    {

        int n,c,p;

        cin>>n>>c>>p;

        string A,B;

        vector<string> Q1,Q2,Q3,Q4; 

        {

            cin>>A>>B;

            if (B=="noun") Q1.push_back(A);

            if (B=="intransitive-verb") Q2.push_back(A);

            if (B=="transitive-verb") Q3.push_back(A);

            if (B=="conjunction") Q4.push_back(A);

        }

        int maxand=min((int)(Q4.size()),p);

        int maxword=maxand+p;

        vector<nd> ans;

        rep(s1,0,Q3.size()) 

        {

            int s2=min((int)(Q2.size()),maxword-s1);

            s2=min(s2,(int)(Q1.size())-2*s1);

            int s3=min(c,(int)(Q1.size())-2*s1-s2);

            if (!s1) while (s3>0) s3--;

            if (s1<0||s2<0||s3<0) continue;

            ans.push_back({s1,s2,s3,3*s1+2*s2+s3});

        }

        sort(ans.begin(),ans.end());

        int s1=0,s2=0,s3=0,O=0; 

        if (ans.size())

        {

            s1=ans[0].a,s2=ans[0].b,s3=ans[0].c,O=ans[0].d;

        }

        vector<string> Q;         

  rep(i,1,s2)

        {

            Q.push_back(Q1.back()+" "+Q2.back());

            Q1.pop_back(); Q2.pop_back();

        }

        rep(i,1,s1)

        {

            string s=Q1.back()+" "+Q3.back();

            Q1.pop_back(); Q3.pop_back();

            s+=" "+Q1.back();

            Q1.pop_back();

            if (i==1)

            {

                while (s3--)

                {

                    s+=", "+Q1.back();

                    Q1.pop_back();

                }

            }

            Q.push_back(s);

        }

        int round=min((int)(Q4.size()),(int)(Q.size())/2);

        cout<<O+round<<endl;

        string W; 

        rep(i,0,round-1)

        {

          W+=Q[i*2]+" "+Q4.back()+" "+Q[i*2+1]+". ";

          Q4.pop_back();

        }

        for (int i=round*2;i<Q.size();i++)

          W+=Q[i]+". ";

        for (int i=0;i+1<W.length();i++)

          cout<<W[i];

        cout<<endl;

    }

    return 0;

}

 

图片铜牌第三题:

#include <iostream>

#include <vector>

using namespace std;

#define rep(i,h,t) for (int i=h;i<=t;i++)

#define dep(i,t,h) for (int i=t;i>=h;i--)

int n,k,t;

int main()

{

    cin>>n>>k>>t;

    vector<int> a(n+10),L(n+10),R(n+10),p(n+10);

    vector<bool> h(n+10);

    rep(i,1,k) cin>>a[i];

    a[k+1]=a[1]+n;

    rep(i,1,k) h[a[i]]=1;

    rep(i,0,n-1)

      if (h[i]) L[i]=i; else L[i]=L[i-1];

  

    rep(i,1,k) R[a[i]]=a[i+1]-a[i];

    rep(i,0,n-1)

    {

        int tim=t-i+L[i];

        int round=tim/R[L[i]];

        if (tim%R[L[i]]!=0) round++;

   

        p[(i+round*R[L[i]])%n]=i;

       

    }

    rep(i,0,n-2) cout<<p[i]<<" ";

    cout<<p[n-1];

    return 0;

}

 

图片

图片

重磅福利限时领取

 

 

2023年USACO美国公开赛
各级别竞赛考题及解析,添加微信即可领取

图片

TEL:16601876765

 

图片

02

图片

USACO竞赛全解

 

 
USACO竞赛(United States of America Computing Olympiad, 美国计算机奥林匹克竞赛) 是一项针对全世界所有的高中信息学竞赛选手的一项竞赛,已有29年历史,是世界范围内极具认可的计算机赛事。
 
图片
 
其官网为美国有名的在线题库,更是美国中学生的官方赛事网站。专门为信息学竞赛选手准备,但必须在注册后才能进入题库。
 

图片

 
#01、USACO比赛说明:
 
USACO是美国含金量极高的一个信息学奥赛,分为铜、银、金、铂金级别需要学生从铜级开始比赛,层层晋级。USACO比赛的难度也是随着级别依次递增,学生需要在规定的时间内完成3道题目。
 
USACO每个赛季线上比赛共4轮,分别为12月、1月、2月月赛及3月公开赛。每个人都可以参加,不限国籍。训练营一般是在线下举行,只有在USACO比赛中晋级铂金且是美国籍学生才可以参加。
 
USACO每一轮比赛,参赛者可以选择比赛时间期内周五到周一任意时间窗口)参赛,通常3场月赛的比赛长达4小时,美国公开赛的比赛长达5小时。USACO美国公开赛各级别比赛难度是高于月赛各级别比赛难度的。
 
图片
 
#02、USACO晋级规则
 
学生参加USACO计算机奥赛提交代码(提交次数无限制)后,系统会自动给出评分,每个编程问题的分值都是333.333分,总分是1000分如果拿到满分,系统会提示直接晋级,则可在本次月赛中继续挑战更高难度的试题。

一般新注册的学生自动归类为铜牌比赛,
学生若在月赛中能拿到接近满分的分数则可以一直晋级到铂金,也可以在后续的月赛/公开赛中挑战更高级别的比赛。相对而言参加USACO竞赛拿到更高级别奖项的机会还是比较多的。
 
一般月赛考试结束后,会划出晋级分数线。如果成功晋级,可在下个月的比赛中参加更高级别的竞赛一般来说,高于750分或800分的分数通常可以获得晋级
 
 

 

图片
犀牛竞赛辅导班
 
 

对于USACO的课程体系,经过不断的研究,以及对于⼏百名学⽣的学习能⼒分 析,犀牛计算机教师团队最终总结出了⼀套lecture + lab的课程体系⽅案。即知识点授课+ 习题课教学体系,这是⽬前很多美国主流⼤学都在⽤的教育体系,我们经过改良优化这种体系来⾼效备战USACO考试。

 

图片

 

图片
图片
图片

USACO竞赛

图片

暑期班/冲刺班

犀牛金牌导师带队

线上线下同步辅导

 

由业内多名教学专家共同组建,不乏来自加州理工大学、剑桥大学、清华大学、北京大学、复旦大学、新加坡国立大学等国际一流大学。犀牛拥有学科和竞赛专业领域内,经验丰富的老师。

 

针对USACO特设了暑期班和冲刺班,欢迎大家了解,可以添加老师微信X-NEW999解详情。

 

犀牛新开USACO铂金班

1V3(全球只招三个学生)

授课老师:计算机能力全球前500名

冲刺3月底美国公开赛(难度最大)

好班不等人

扫码来咨询哦

图片

TEL:16601876765

 

 
图片

 

犀牛教育课程优势

图片

 

经验丰富,高学历导师齐上阵
严格把关,课程内容迭代优化
精准落实,拒绝无效任务施行
个性定制,人人收获优异成绩

 

顶尖师资带你备考

图片

 

图片

 

更多竞赛课程信息

添加李老师微信咨询

图片

TEL:16601876765

关键字:USACO竞赛,USACO培训班,USACO竞赛辅导,

推荐资讯
Contact Us