——犀牛教育“5周年”课程大促——
2023年USACO美国公开赛,昨日刚比赛结束!USACO竞赛考题难度如何呢?现在公布考题&答案&解析,各位同学速来码住!
01
USACO美国公开赛铜牌3大考题
P2 MOO LANGUAGE
P3 ROTATE AND SHIFT
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;
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;
if (t[i]) cout<<i<<endl;
return 0;
}铜牌第二题:
#include <iostream>
#include <vector>
struct nd{
int a,b,c,d;
bool operator <(const nd x)const{
return d>x.d;
};
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();
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;
铜牌第三题:
int n,k,t;
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;
if (h[i]) L[i]=i; else L[i]=L[i-1];
rep(i,1,k) R[a[i]]=a[i+1]-a[i];
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];
重磅福利限时领取
2023年USACO美国公开赛各级别竞赛考题及解析,联系客服领取
USACO比赛结束,犀牛重磅讲座来袭
ChatGPT4.0降临,学CS刻不容缓更多计算机赛事准备和问题探讨联系客服
02
美国计算机奥赛USACO全解
03
犀牛USACO竞赛课程辅导
犀牛USACO竞赛采用体系化的专业教材,将竞赛知识点和国际课程知识点整合。USACO教研组老师曾带出多名白金组学员,拥有专业的教学能力。
Teaching
老师将根据不同学生的编程水平、学习能力、学习进度进行教学调整,从而真正地帮助每位同学提升自己的计算机能力,培养学科思维,帮助你在竞赛之中脱颖而出,赛出新高度!
犀牛USACO竞赛体系
犀牛教育计算机竞赛教研团队依据美国下一代科学标准NGSS,美国计算机教师协会K-12教育标准,美国共同核心州立标准CCSSS,设计编程课程。
为了便于大家理解,我们把USACO与AMC竞赛的难度做了简单的对比,参考如下👇
白金组≈AIME
黄金组≈AMC12
白银组≈AMC10
青铜组≈AMC 8
USACO
世界名校计算机专业申请加分项
常规班
为了帮助学生冲银夺金,
犀牛特别开设了USACO竞赛辅导班!
犀牛USACO竞赛组导师
曾带出多名白金组学员
善抓考试重点,逐级分析考点
此外还有竞赛组老师独家研发的必做题单
助力每位学生冲击银组&金组!
USACO竞赛冲冲冲!
👊👊👊
名额有限!报名从速!
关键字:USACO竞赛,USACO,USACO培训,USACO课程,USACO学习,USACO考试,