犀牛國際教育旗下指定官方網(wǎng)站~

課程咨詢熱線 400-656-1680

上海USACO培訓(xùn)丨2023年USACO公開賽各組別真題免費(fèi)領(lǐng)??!

發(fā)布時(shí)間:2023-03-31 09:16:35

編輯:言言來源:網(wǎng)絡(luò)瀏覽:

2023年USACO競賽公開賽已經(jīng)結(jié)束。這次USACO競賽的難度有多大?犀牛教育計(jì)算機(jī)競賽教研組的石老師分析了2023年USACO競賽銅組的試題,供大家參考。需要其他組別試題,請找在線客服領(lǐng)取

 

01
2023USACO競賽銅組考題解析

 

這次USACO公開賽銅牌考試還是以暴力搜索和模擬為主,尤其是第二題,需要仔細(xì)審題,該題也比較有意思,結(jié)合了語言中的語法知識,很多學(xué)生很容易在這里犯懵。如果不仔細(xì)理解題意,很有可能連題都看不懂。

 

本次考試1,2題都有考察到字符串的知識點(diǎn),如果對與字符串知識點(diǎn)不了解的學(xué)生就要多加小心了。

 

USACO公開賽銅牌考試還是以暴力搜索和模擬為主,尤其是第二題,需要仔細(xì)審題,該題比較有意思,結(jié)合了語言中語法知識,很多學(xué)生很容易在這里犯懵。如果不仔細(xì)理解題意,很有可能連題都看不懂。

 

考題1:

考慮每一段"XFF...FFY"可以產(chǎn)生多少貢獻(xiàn),

結(jié)論是如果X=Y,能產(chǎn)生0,2,4,6,...的貢獻(xiàn),

否則能產(chǎn)生1,3,5,7,...的貢獻(xiàn),

對于下面的情況 整體減一可以得到和上面一樣的結(jié)論。

再考慮邊緣,FF...FFY可以產(chǎn)生多少貢獻(xiàn)?

發(fā)現(xiàn)能產(chǎn)生0,1,2,...的貢獻(xiàn),

于是我們可以分別統(tǒng)計(jì)這兩種,加上初始答案即可。

考察知識點(diǎn): 分類討論

 

考題2:

(分類討論題)

首先我們可以去考慮conjunction的數(shù)量,這個(gè)不能超過.的數(shù)量;

其次考慮單詞的數(shù)量,這個(gè)不能超過conjunction的數(shù)量+.的數(shù)量;

然后我們可以通過枚舉transitive-verb的數(shù)量和intransitive-verb的數(shù)量來確定單詞的最多個(gè)數(shù);

最后我們依次將單詞拼接在一起即可。

考察知識點(diǎn): 模擬

 

考題3:

考慮一個(gè)位置上的值p假如從a[i]變成a[i+1],那么下一次對他進(jìn)行變化一定是由當(dāng)前a[i]移動過去造成的,

所以每個(gè)點(diǎn)的運(yùn)動都具有周期性,每經(jīng)過t秒,就會往后移動t的距離。

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

考察知識點(diǎn) :周期性的發(fā)現(xiàn)

 

02
2023USACO競賽銅組考題參考答案

 

銅牌第一題:

#include

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<

rep(i,0,n-1)

if (t[i]) cout<

return 0;

}

 

銅牌第二題:

#include

#include

#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 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 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 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<

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

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

for (int i=0;i+1

cout<

cout<

}

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;

}

 

 

03
USACO競賽培訓(xùn)課程

 

圖片

 

犀牛USACO競賽培訓(xùn)班課,由犀牛金牌導(dǎo)師親授,根據(jù)USACO考察方向及評分標(biāo)準(zhǔn),提供詳細(xì)科學(xué)參賽指導(dǎo)及學(xué)習(xí)指導(dǎo)幫助。

 

對于USACO的課程體系,經(jīng)過不斷的研究,以及對于?百名學(xué)?的學(xué)習(xí)能?分析,犀牛計(jì)算機(jī)教研團(tuán)隊(duì)最終總結(jié)出了?套lecture + lab的課程體系?案。即知識點(diǎn)授課+ 習(xí)題課教學(xué)體系,這是?前很多美國主流?學(xué)都在?的教育體系,我們經(jīng)過改良優(yōu) 化這種體系來?效備戰(zhàn)USACO考試。

 

精品小班、一對一等多種班型可供選擇,線下+線上同步授課,上海、北京、南京、蘇州、無錫、深圳、重慶等地都設(shè)有校區(qū)詳細(xì)課程內(nèi)容可咨詢在線客服

相關(guān)標(biāo)簽:
TOP