信息學奧賽作為傳統(tǒng)五大學科競賽,具有很高的含金量绿店,和一定的難度庐橙,但是經(jīng)過系統(tǒng)的學習,拿下獎項并不難转培,我們來看看19年的信息學奧賽都考了哪些知識吧浆竭。
還不了解信息學的同學可以翻我以前的文章,或者加文后公眾號聯(lián)系我喔删窒!
恭喜J組同學完成了一項賽事挑戰(zhàn)顺囊,這里把J組的4道編程題代碼梳理一下,幫助同學們查漏補缺驶社。
第一題:數(shù)字游戲
該題主要考察字符串的定義和使用测萎,考察選手基本的C++語法知識
參考代碼:
第二題:公交換乘
本題屬于模擬類硅瞧,考察選手C++基本語法知識
參考代碼:
第三題:紀念品
紀念品價格每天都波動或辖,通過手中現(xiàn)有金幣數(shù)購買盡可能多的紀念品颂暇,T天內(nèi)賣出獲得最多金幣但惶。可以使用背包县爬。
參考代碼:
第四題:加工零件
參考代碼(有點長斩狱,考察最短路徑算法):
#include
#include
#include
#include
using namespace std;
const int MAXN=1e5+5;
const int MAXM=2e5+5;
int n,m,que;
int head[MAXN],v[MAXM],next[MAXM],cnt=0;
int dis[MAXN][2];
void add_edge(int s,int t){
v[++cnt]=t;
next[cnt]=head[s];
head[s]=cnt;
}
void spfa(){
//0表示偶數(shù)
//1表示奇數(shù)
memset(dis,0x3f,sizeof(dis));
dis[1][0]=0;//起始路徑0
queue q;//隊列實現(xiàn)
q.push(1);
while(!q.empty()){
int cur=q.front();
q.pop();
for(int i=head[cur];i;i=next[i]){
int np=v[i];
if(dis[cur][0]+1
q.push(np);
dis[np][1]=min(dis[np][1],dis[cur][0]+1);
dis[np][0]=min(dis[np][0],dis[cur][1]+1);
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&que);
for(int i=0;i
int u,v;
scanf("%d%d",&u,&v);
add_edge(u,v);
add_edge(v,u);
}
spfa();
while(que--){
int a,l;
scanf("%d%d",&a,&l);
if(head[1]&&dis[a][l&1]<=l)printf("Yes\n");
else printf("No\n");
}
return 0;
}
每個孩子都有機會學習計算機