日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

2020-2021年度第二届全国大学生算法设计与编程挑战赛(春季赛)【部分题题解】

發布時間:2025/3/20 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020-2021年度第二届全国大学生算法设计与编程挑战赛(春季赛)【部分题题解】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2021年6月份打的比賽,現在才開始復盤。

目錄

  • A: 智慧果【難度: 簽到題 / 知識點: 遞推】
  • B: Xanadu【難度: 中 / 知識點: 最短路】
  • C: 這是一道大難題【難度: 一般 / 知識點: 最小生成樹】
  • H: 智慧數【難度: 簽到 / 知識點: 模擬】
  • L: 這是一道壓軸題【難度: 一般 / 知識點: 思維 枚舉】

A: 智慧果【難度: 簽到題 / 知識點: 遞推】

http://106.75.49.226/problem/ADPC1-Z-A

#include<bits/stdc++.h> using namespace std; const int N=1e5+10; const int mod=1e5; long long int f[N],n; int main(void) {f[1]=1,f[2]=2,f[3]=5;for(int i=4;i<=1000;i++) f[i]=(f[i-1]*f[i-2]*f[i-3]+f[i-1]+f[i-2]+f[i-3])%mod;cout<<f[1000];return 0; }

B: Xanadu【難度: 中 / 知識點: 最短路】


http://106.75.49.226/problem/ADPC1-Z-B
通過每一行的點,它前面有幾個1就要走多遠。以此來建立一個圖,對于該圖求最短路即可。

#include<bits/stdc++.h> using namespace std; const int N=1e3+10; const int inf=0x3f3f3f3f; int g[N][N],dist[N],st[N],n,cnt; int a[N][N]; int Dijkstra() {memset(dist,0x3f,sizeof dist);dist[1]=0;for(int i=0;i<n;i++){int t=-1;for(int j=1;j<=n;j++) if(!st[j]&&(t==-1 || dist[j]<dist[t] )) t=j;st[t]=1;for(int j=1;j<=n;j++) dist[j]=min(dist[j],dist[t]+g[t][j]);}return dist[n]; } int main(void) {cin>>n;memset(g,0x3f,sizeof g);for(int i=1;i<=n;i++){int t=0;for(int j=1;j<=n;j++){cin>>a[i][j];if(a[i][j]) g[i][j]=t,t++;}}int ans=Dijkstra();cout<<ans<<endl;return 0; }

C: 這是一道大難題【難度: 一般 / 知識點: 最小生成樹】


http://106.75.49.226/problem/ADPC1-Z-C
解析: 先將選的邊連接,再跑一下克魯斯卡爾算法即可。

#include<bits/stdc++.h> using namespace std; const int N=1e5*2+10; struct edge{int a,b,c;}edges[N]; int n,m,k,cnt,p[N]; long long int res; int find(int x) {if(x!=p[x]) p[x]=find(p[x]);return p[x]; } bool cmp(edge a,edge b) {return a.c<b.c;} void kruskal() {for(int i=1;i<=n;i++) p[i]=i;res+=edges[k-1].c;p[find(edges[k-1].b)]=find(edges[k-1].a);cnt++;sort(edges,edges+m,cmp);for(int i=0;i<m;i++){int a=edges[i].a,b=edges[i].b,c=edges[i].c;if(find(a)!=find(b)){res+=c;p[find(b)]=find(a);cnt++;}} } int main(void) {cin>>n>>m;for(int i=0;i<m;i++) cin>>edges[i].a>>edges[i].b>>edges[i].c;cin>>k;kruskal(); cout<<res;return 0; }

H: 智慧數【難度: 簽到 / 知識點: 模擬】


http://106.75.49.226/problem/ACPC1-Z-H

#include<bits/stdc++.h> using namespace std; typedef long long int LL; LL cnt; int main(void) {for(LL i=2;;i++){for(LL j=2;j<i;j++){if(i%j==0){LL t=sqrt(i*j);if(t*t==i*j) {cnt++;if(cnt==3000){cout<<i<<endl;return 0;}break;}}}}return 0; }

L: 這是一道壓軸題【難度: 一般 / 知識點: 思維 枚舉】


http://106.75.49.226/problem/ADPC1-Z-L
解析: 將一串的0和1壓縮為一個數,最后枚舉中間去掉的一段。

#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int n,k,ans; vector<int>ve; string s; int main(void) {cin>>n; cin>>s;for(int i=0;i<n;i++){k++;if((i+1==n) || s[i]!=s[i+1] ) ve.push_back(k),ans=max(ans,k),k=0;}for(int i=1;i<ve.size();i++){if(i!=ve.size()-1) ans=max(ans,ve[i-1]+ve[i+1]);}cout<<ans<<endl;return 0; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的2020-2021年度第二届全国大学生算法设计与编程挑战赛(春季赛)【部分题题解】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。