電子學會C/C++編程等級考試2024年03月(八級)真題解析

在這里插入圖片描述

C/C++編程(1~8級)全部真題?點這里

第1題:道路

N個以 1 … N 標號的城市通過單向的道路相連:。每條道路包含兩個參數:道路的長度和需要為該路付的通行費(以金幣的數目來表示)
Bob and Alice 過去住在城市 1.在注意到Alice在他們過去喜歡玩的紙牌游戲中作弊后,Bob和她分手了,并且決定搬到城市N。他希望能夠盡可能快的到那,但是他囊中羞澀。我們希望能夠幫助Bob找到從1到N最短的路徑,前提是他能夠付的起通行費。
時間限制:1000
內存限制:65536
輸入
第一行包含一個整數K, 0 <= K <= 10000, 代表Bob能夠在他路上花費的最大的金幣數。第二行包含整數N, 2 <= N <= 100, 指城市的數目。第三行包含整數R, 1 <= R <= 10000, 指路的數目. 接下來的R行,每行具體指定幾個整數S, D, L 和 T來說明關于道路的一些情況,這些整數之間通過空格間隔: S is 道路起始城市, 1 <= S <= N D is 道路終點城市, 1 <= D <= N L is 道路長度, 1 <= L <= 100 T is 通行費 (以金幣數量形式度量), 0 <= T <=100 注意不同的道路可能有相同的起點和終點。
輸出
輸入結果應該只包括一行,即從城市1到城市N所需要的最小的路徑長度(花費不能超過K個金幣)。如果這樣的路徑不存在,結果應該輸出-1。
樣例輸入
5
6
7
1 2 2 3
2 4 3 3
3 4 2 4
1 3 4 1
4 6 2 1
3 5 2 0
5 4 3 2
樣例輸出
11

答案:

#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
struct Road
{int d,L,t;
};
int N,K,R;
vector < vector <Road> > G(110);//用二維數組表示臨界表,G[s]表示和s鄰接的路
int minLen;//全局變量,記錄最短的路徑長度
int totalCost;//當前狀態的花費
int totalLen;//當前狀態的長度
int visited[110];
int minL[110][10010];//minL[i][j]的意義是當到達i點是花費為j時的最短路徑
void Dfs(int s)
{if(s==N){minLen=min(minLen,totalLen);return ;}int len=G[s].size();for(int i=0;i<len;i++)//枚舉和s相鄰接額情況{Road r=G[s][i];if(!visited[r.d])//如果沒有被走過{/*下面三個if語句是三條剪枝條件*/if(totalCost+r.t>K)//如果當前花銷大于K了continue;if(totalLen+r.L>=minLen)//如果當前的路徑已經超過了已存在的最短路徑,那就沒必要往后dfs了continue;//如果存在兩種方式都到達同一點并且花銷相同,但是如果當前的長度大于另一種方式的長度,則continueif(totalLen+r.L>minL[r.d][totalCost+r.t])continue;minL[r.d][totalCost+r.t]=totalLen+r.L;visited[r.d]=1;totalCost+=r.t;totalLen+=r.L;Dfs(r.d);visited[r.d]=0;//因為可能存在多種方式的dfs的路徑,所以每次dfs之后都要還原到之前的狀態totalCost-=r.t;totalLen-=r.L;}}
}
int main()
{cin>>K>>N>>R;for(int i=0;i<R;i++){int s;Road r;cin>>s;cin>>r.d>>r.L>>r.t;G[s].push_back(r);}totalCost=0;totalLen=0;minLen=1<<30;//無窮大memset(visited,0,sizeof(visited));for(int i=1;i<=N;i++)for(int j=0;j<10010;j++)minL[i][j]=1<<30;visited[1]=1;Dfs(1);if(minLen<(1<<30))cout<<minLen<<endl;elsecout<<-1<<endl;return 0;
}

第2題:Freda的越野跑

Freda報名參加了學校的越野跑。越野跑共有N人參加,在一條筆直的道路上進行。這N個人在起點處站成一列,相鄰兩個人之間保持一定的間距。比賽開始后,這N個人同時沿著道路向相同的方向跑去。換句話說,這N個人可以看作x軸上的N個點,在比賽開始后,它們同時向x軸正方向移動。
假設越野跑的距離足夠遠,這N個人的速度各不相同且保持勻速運動,那么會有多少對參賽者之間發生“趕超”的事件呢?
時間限制:1000
內存限制:262144
輸入
第一行1個整數N。 第二行為N 個非負整數,按從前到后的順序給出每個人的跑步速度。 對于50%的數據,2<=N<=1000。 對于100%的數據,2<=N<=100000。
輸出
一個整數,表示有多少對參賽者之間發生趕超事件。
樣例輸入
5
1 3 10 8 5
樣例輸出
7
提示
我們把這5個人依次編號為A,B,C,D,E,速度分別為1,3,10,8,5。 在跑步過程中: B,C,D,E均會超過A,因為他們的速度都比A快; C,D,E都會超過B,因為他們的速度都比B快; C,D,E之間不會發生趕超,因為速度快的起跑時就在前邊。

答案:

#include <iostream>
#define N 100002
int a[N] = {0}, t[N] = {0};
long long c = 0;
void merge(int l, int m, int r) {int i = l, j = m + 1, k = l;while (i <= m && j <= r)if (a[i] > a[j])t[k++] = a[i++];else {t[k++] = a[j++];c += 1 + m - i;}while (i <= m)t[k++] = a[i++];while (j <= r)t[k++] = a[j++];for (i = l; i <= r; ++i)a[i] = t[i];
}
void divide(int l, int r) {int m;if (r > l) {m = (r + l) / 2;divide(l, m);divide(m + 1, r);merge(l, m, r);}
}
int main() {int n, i = 0;std::cin >> n;while (i < n)std::cin >> a[i++];divide(0, n - 1);std::cout << c;
}

第3題:Rainbow的商店

Rainbow開了一家商店,在一次進貨中獲得了N個商品。
已知每個商品的利潤和過期時間。
Rainbow每天只能賣一個商品,并且過期商品不能再賣。
Rainbow也可以選擇在每天出售哪個商品,并且一定可以賣出。
由于這些限制,Rainbow需要制定一份合理的售賣計劃。請你計算一下,Rainbow最終可以獲得的最大收益。
時間限制:1000
內存限制:262144
輸入
第一行兩個整數N。 接下來N行每行兩個整數,分別表示每個商品的利潤、過期時間。 1<=N,利潤,時間<=10000。
輸出
輸出一個整數,表示Rainbow最終可以獲得的最大收益。
樣例輸入
7
20 1
2 1
10 3
100 2
8 2
5 20
50 10
樣例輸出
185
提示
第1天賣出20 第2天賣出100 第3天賣出10 第4天賣出50(實際上只要在第10天賣就可以) 第5天賣出5(實際上只要在第20天前賣就可以) 總計185 其它2件商品由于過期、每天只能賣一個的限制,在最優策略下應該不出售。

答案:

#include<iostream>
#include<algorithm>
#include<queue>
#pragma warning (disable:4996);
using namespace std;
int N;
struct Goods
{int w;int d;friend bool operator <(const Goods a, const Goods b){if (a.w != b.w){return a.w < b.w;//大的天數小的在前}else{return a.d > b.d;}}
}good[10005];
bool vis[10005] = {};
int main()
{cin >> N;priority_queue<Goods>que;int maxval=0;for (int i = 1; i <= N; i++){scanf("%d %d", &good[i].w, &good[i].d);que.push(good[i]);}while (!que.empty()){Goods now = que.top();que.pop();for (int i = now.d; i >= 1; i--){if (!vis[i]){vis[i] = 1;maxval += now.w;break;}}}printf("%d\n", maxval);return 0;
}

第4題:冰闊落

老王喜歡喝冰闊落。
初始時刻,桌面上有n杯闊落,編號為1到n。老王總想把其中一杯闊落倒到另一杯中,這樣他一次性就能喝很多很多闊落,假設杯子的容量是足夠大的。
有m 次操作,每次操作包含兩個整數x與y。
若原始編號為x 的闊落與原始編號為y的闊落已經在同一杯,請輸出"Yes";否則,我們將原始編號為y 所在杯子的所有闊落,倒往原始編號為x 所在的杯子,并輸出"No"。
最后,老王想知道哪些杯子有冰闊落。
時間限制:10000
內存限制:65536
輸入
有多組測試數據,少于 5 組。 每組測試數據,第一行兩個整數 n, m (n, m<=50000)。接下來 m 行,每行兩個整數 x, y (1<=x, y<=n)。
輸出
每組測試數據,前 m 行輸出 “Yes” 或者 “No”。 第 m+1 行輸出一個整數,表示有闊落的杯子數量。 第 m+2 行有若干個整數,從小到大輸出這些杯子的編號。
樣例輸入
3 2
1 2
2 1
4 2
1 2
4 3
樣例輸出
No
Yes
2
1 3
No
No
2
1 4

答案:

#include <bits/stdc++.h>
using namespace std;
string str;
int a[50000+5],cnt;
int root(int x)
{if(a[x]==x) return x;return root(a[x]);
}
void find(int l,int r)
{int ll=root(l),rr=root(r);if(ll==rr){printf("Yes\n");//cout<<"Yes"<<endl;}else{a[rr] =ll;cnt--;//cout<<"No"<<endl;printf("No\n");}
}
int main()
{int m,n,l,r;while(scanf("%d %d",&n,&m)!=EOF){cnt=n;for(int i=1;i<=n;i++){a[i]=i;}for(int i=1;i<=m;i++){scanf("%d %d",&l,&r);//cin>>l>>r;find(l,r);}printf("%d\n",cnt);//cout<<cnt<<endl;for(int i=1;i<=n;i++)if(a[i]==i) printf("%d ",i);//cout<<i<<" ";//cout<<endl;printf("\n");}return 0;}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11134.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11134.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11134.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍海創業商機小吃配方項目,日入200+ ,小白可上手,圖文創作轉現快

小吃技術銷售&#xff0c;一單價格從幾元到幾百元不等&#xff0c;行業競爭相對較小&#xff0c;是一個相對冷門的領域。只需一部手機&#xff0c;就可以發布圖文并茂的內容&#xff0c;配上背景音樂&#xff08;BGM&#xff09;&#xff0c;即使是對視頻剪輯不熟悉的新手&…

面試中算法(金礦)

有一位國王擁有5座金礦&#xff0c;每座金礦的黃金儲量不同&#xff0c;需要參與挖掘的工人人數也不同。 例如&#xff0c;有的金礦儲量是5ookg黃金&#xff0c;需要5個工人來挖掘;有的金礦儲量是2ookg黃金&#xff0c;需要3個工人來挖掘...... 如果參與挖礦的工人的總數是10。…

【Oracle impdp導入dmp文件(windows)】

Oracle impdp導入dmp文件&#xff08;windows&#xff09; 1、連接數據庫2、創建與導出的模式相同名稱的用戶WIRELESS2&#xff0c;并賦予權限3、創建directory 的物理目錄f:\radio\dmp&#xff0c;并把.dmp文件放進去4、連接新用戶WIRELESS25、創建表空間的物理目錄F:\radio\t…

試衣不再有界:Tunnel Try-on開啟視頻試衣應用新紀元

論文&#xff1a;https://arxiv.org/pdf/2404.17571 主頁&#xff1a;https://mengtingchen.github.io/tunnel-try-on-page/ 一、摘要總結 隨著虛擬試衣技術的發展&#xff0c;消費者和時尚行業對于能夠在視頻中實現高質量虛擬試衣的需求日益增長。這項技術允許用戶在不實際穿…

目標檢測——印度車輛數據集

引言 親愛的讀者們&#xff0c;您是否在尋找某個特定的數據集&#xff0c;用于研究或項目實踐&#xff1f;歡迎您在評論區留言&#xff0c;或者通過公眾號私信告訴我&#xff0c;您想要的數據集的類型主題。小編會竭盡全力為您尋找&#xff0c;并在找到后第一時間與您分享。 …

弱監督語義分割學習筆記

目錄 partial cross entropy loss GitHub - LiheYoung/UniMatch: [CVPR 2023] Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation partial cross entropy loss import torch import torch.nn.functional as Fdef partial_cross_entropy_loss…

區塊鏈中的APP與傳統APP的區別

一、技術 區塊鏈中的APP是基于區塊鏈技術開發的&#xff0c;而傳統APP則基于傳統的應用程序商店或網頁。區塊鏈中的APP利用區塊鏈技術的去中心化、數據不可篡改等特點&#xff0c;使得應用程序的開發和分發更加安全、透明和可信。與傳統APP相比&#xff0c;區塊鏈中的APP無需中…

如何實現嵌套路由

實現步驟 1. 新建子頁面 2. 在router/index.js中的父路由節點添加children數組 3. 在children中添加子路由 {path: /,name: home,component: HomeView,children: [ {path: /pageA,name: pageA,component: pageA},{path: /pageB,name: pageB,component: pageB}] }, 5.在父路…

Web安全:SQL注入之布爾盲注原理+步驟+實戰操作

「作者簡介」&#xff1a;2022年北京冬奧會網絡安全中國代表隊&#xff0c;CSDN Top100&#xff0c;就職奇安信多年&#xff0c;以實戰工作為基礎對安全知識體系進行總結與歸納&#xff0c;著作適用于快速入門的 《網絡安全自學教程》&#xff0c;內容涵蓋系統安全、信息收集等…

前端VUE基礎之創建腳手架

創建腳手架 第一步&#xff08;僅第一次執行&#xff09;&#xff1a;全局安裝vue/cli。 npm install -g vue/cli 到你要創建項目的目錄&#xff0c;然后使用命令創建項目 vue create xxxx 第三步&#xff1a;啟動項目 npm run serv 備注&#xff1a; 1. 如出現下載緩慢請…

PHP流程控制

PHP 流程控制主要是 if 和 switch 流程控制。 當您編寫代碼時&#xff0c;您常常需要為不同的判斷執行不同的動作。您可以在代碼中使用條件語句來完成此任務。 在 PHP 中&#xff0c;提供了下列條件語句&#xff1a; if 語句 - 在條件成立時執行代碼if...else 語句 - 在條件…

訪客管理系統對于校園安全的重要性

校園訪客辦理計劃是針對校園安全需求規劃的安全辦理體系&#xff0c;主要用于對校園外來人員的科學辦理。要做好校園安全作業&#xff0c;把風險分子拒之門外尤為要害。校園訪客辦理計劃實現訪客實名制&#xff0c;并結合公安網、黑名單功用&#xff0c;對風險人員進行提前預警…

沒有公網ip,如何實現外網訪問內網?

目前撥號上網是最廣泛的上網方式&#xff0c;這種方式優點是價格便宜&#xff0c;缺點是沒有固定公網ip&#xff0c;每次重新您撥號ip地址都會變。如果有一臺服務器&#xff0c;需要實現外網訪問&#xff0c;在沒有固定公網ip的環境下&#xff0c;該如何實現呢&#xff1f;使用…

【CTF Web】QSNCTF 文章管理系統 Writeup(SQL注入+Linux命令+RCE)

文章管理系統 題目描述 這是我們的文章管理系統&#xff0c;快來看看有什么漏洞可以拿到FLAG吧&#xff1f;注意&#xff1a;可能有個假FLAG哦 解法 SQL 注入。 ?id1 or 11 --取得假 flag。 爆庫名。 ?id1 union select 1,group_concat(schema_name) from information_sch…

華為OD機試【統一限載貨物數最小值】(java)(200分)

1、題目描述 火車站附近的貨物中轉站負責將到站貨物運往倉庫&#xff0c;小明在中轉站負責調度 2K 輛中轉車(K輛干貨中轉車&#xff0c;K 輛濕貨中轉車)貨物由不同供貨商從各地發來&#xff0c;各地的貨物是依次進站&#xff0c;然后小明按照卸貨順序依次裝貨到中轉車&#xf…

二維數組 和 變長數組

在上一期的內容中&#xff0c;為諸君講解到了一維數組&#xff0c;在一維數組的基礎上&#xff0c;C語言中還有著多維數組&#xff0c;其中&#xff0c;比較典型且運用較為廣泛的就是我們今天的主角——二維數組 一 . 二維數組的概念 我們把單個或者多個元素組成的數組定義為一…

VScode 修改 Markdown Preview Enhanced 主題與字體

VScode 修改 Markdown Preview Enhanced 主題與字體 1. 修改前后效果對比2. 修改主題2.1 更改默認主題2.2 修改背景色 3. 修改字體 VS Code基礎入門使用可查看&#xff1a; VS Code 基礎入門使用&#xff08;配置&#xff09;教程 其他Vs Code 配置可關注查看&#xff1a; Vs C…

2024年如何選什么版本FL Studio才適合自己編曲?

fl studio是什么軟件 水果編曲軟件 FL Studio&#xff0c;全稱為Fruity Loops Studio&#xff0c;是一款全能音樂制作環境或數字音頻工作站&#xff08;DAW&#xff09;&#xff0c;集編曲、錄音、剪輯、混音等多種功能于一身。 FL Studio最初名為Fruity Loops&#xff0c;因…

外網如何訪問內網?快解析

由于公網IP資源短缺&#xff0c;我們的電腦大多處于內網環境&#xff0c;如何在外網訪問內網電腦&#xff0c;成為一個令人頭疼的問題&#xff0c;下面我給大家推薦一個非常實用的方法。 1&#xff1a;訪問快解析下載安裝快解析服務器 2&#xff1a;運行軟件&#xff0c;點擊“…

2.4 輸入和顯示

本節必須掌握的知識點&#xff1a; 示例五源代碼 代碼分析 匯編解析 2.4.1 示例五 ■格式化輸入函數scanf scanf函數可以從鍵盤讀取輸入的信息。scanf函數同樣可以像printf函數那樣&#xff0c;通過轉換說明“%d”來限制函數只能讀取十進制數。scanf函數的參數為可變參數…