全网独家!2023 USACO竞赛(全国赛)考题&答案解析发布,晋级难度多高? |
时间:2023-03-30 10:05:05 作者:犀牛教育 来源:犀牛教育 |
USACO竞赛美国信息学奥赛,是申请全球计算机专业强校的申请利器,在CS专业众多录取学生的背景履历中都少不了它的身影。每年12月/1月/2月共3场月赛,3月/4月有一场美国公开赛!
2023年USACO美国公开赛,昨日刚比赛结束! 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:
•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.
impressed transitive-verb
impressed transitive-verb
nhoj mooed. farmer taught elsie, bessie and john flew.
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.
•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.
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 = 2: order = [3 4 0 1 2]
T = 3: order = [2 4 3 1 0]
T = 4: order = [1 2 3 4 0]
•Inputs 2-7: N≤1000,T≤10000
•Inputs 8-13: No additional constraints.
USACO OPEN,今年考情如何?
犀牛USACO竞赛辅导石老师认为:
本次USACO公开赛铜牌考试还是以暴力搜索和模拟为主,尤其是第二题,需要仔细审题,该题也比较有意思,结合了语言中的语法知识,很多学生很容易在这里犯懵。如果不仔细理解题意,很有可能连题都看不懂。
本次考试1,2题都有考察到字符串的知识点,如果对与字符串知识点不了解的学生就要多加小心了。
通常USACO OPEN的考试难度比一般月赛要难一些,并且考试时长为五小时(月赛为4小时),对学生来说是一大考验。
考题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美国公开赛 各级别竞赛考题及解析,联系客服领取
USACO比赛结束,犀牛重磅讲座来袭
ChatGPT4.0降临,学CS刻不容缓 更多计算机赛事准备和问题探讨联系客服
USACO竞赛(United States of America Computing Olympiad, 美国计算机奥林匹克竞赛) 是一项针对全世界所有的高中信息学竞赛选手的一项竞赛,已有29年历史,是世界范围内极具认可的计算机赛事。
其官网为美国有名的在线题库,更是美国中学生的官方赛事网站。专门为信息学竞赛选手准备,但必须在注册后才能进入题库。
USACO竞赛是美国含金量极高的一个信息学奥赛,分为铜、银、金、铂金级别,需要学生从铜级开始比赛,层层晋级。USACO比赛的难度也是随着级别依次递增,学生需要在规定的时间内完成3道题目。
USACO每个赛季线上比赛共4轮,分别为12月、1月、2月月赛及3月公开赛。每个人都可以参加,不限国籍。训练营一般是在线下举行,只有在USACO比赛中晋级铂金且是美国籍学生才可以参加。
USACO每一轮比赛,参赛者可以选择比赛时间期内(周五到周一任意时间窗口)参赛,通常3场月赛的比赛长达4小时,美国公开赛的比赛长达5小时。USACO美国公开赛各级别比赛难度是高于月赛各级别比赛难度的。
学生参加USACO计算机奥赛提交代码(提交次数无限制)后,系统会自动给出评分,每个编程问题的分值都是333.333分,总分是1000分。如果拿到满分,系统会提示直接晋级,则可在本次月赛中继续挑战更高难度的试题。
一般新注册的学生自动归类为铜牌比赛,学生若在月赛中能拿到接近满分的分数则可以一直晋级到铂金,也可以在后续的月赛/公开赛中挑战更高级别的比赛。相对而言参加USACO比赛拿到更高级别奖项的机会还是比较多的。
一般月赛考试结束后,会划出晋级分数线。如果成功晋级,可在下个月的比赛中参加更高级别的竞赛。一般来说,高于750分或800分的分数通常可以获得晋级。
犀牛USACO竞赛采用体系化的专业教材,将竞赛知识点和国际课程知识点整合。USACO教研组老师曾带出多名白金组学员,拥有专业的教学能力。
老师将根据不同学生的编程水平、学习能力、学习进度进行教学调整,从而真正地帮助每位同学提升自己的计算机能力,培养学科思维,帮助你在竞赛之中脱颖而出,赛出新高度!
犀牛教育计算机竞赛教研团队依据美国下一代科学标准NGSS,美国计算机教师协会K-12教育标准,美国共同核心州立标准CCSSS,设计编程课程。
为了便于大家理解,我们把USACO与AMC竞赛的难度做了简单的对比,参考如下👇
白金组≈AIME
黄金组≈AMC12
白银组≈AMC10
青铜组≈AMC 8
为了帮助学生冲银夺金,
犀牛特别开设了USACO竞赛辅导班!
犀牛USACO竞赛组导师
曾带出多名白金组学员
善抓考试重点,逐级分析考点
此外还有竞赛组老师独家研发的必做题单
助力每位学生冲击银组&金组!
犀牛计算机教研组以USACO组织推荐的官方网站USACO guide上的知识点为主,对各组别算法进行了整理和更新,并创作了500+的模拟真题,助力学生冲击USACO金银成绩!
👊👊👊
|
关键字:USACO竞赛,USACO,USACO培训,USACO课程,USACO学习,USACO考试,
|