2021遼寧省大學生程序設計競賽(正式賽)

比賽經過:寫了七八題,有一個topsort寫錯地方了,本場題目都較為簡單考的知識都比較明顯

補題:有些題目還得多思考其實也不難

目錄

B.阿強的路

C.傳染病統計

D.阿強與網格

E.生活大爆炸

F.Capslock

G.字節類型

H.制造游戲幣

I.完美主義

L.神奇的回答

M.比賽!


B.阿強的路

floyd變式

考慮到數據范圍圖論知識可以聯想到floyed,注意題目要的結果是兩點之間路徑中的最大點權*最大邊權最小,我們對于路徑a-b就是要找到用了哪些點,跑了哪些邊,由于floyd的性質本質就是dp,在用前k個點的時候的最短路,我們不妨按照點權排序去跑第k層,對于當前層次如果邊權比我的大,說明在之前有一個邊權更小的同時點權最小的答案當前不需要更新答案,本題重復考察了floyd的性質理解

int w[M];
LL g[M][M],f[M][M]; // 兩邊之間的最短路的最大邊權和 兩點之間最短路的最大邊權*最大點權
struct code{int w,id;bool operator<(const code&t)const{return w<t.w;}
}e[N];void solve(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>w[i];e[i]={w[i],i};}sort(e+1,e+1+n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)f[i][j]=g[i][j]=2e18;while(m--){int a,b;LL c; cin>>a>>b>>c;g[a][b]=g[b][a]=min(g[a][b],c);f[a][b]=f[b][a]=min(f[a][b],g[a][b]*max(w[a],w[b]));}for(int k=1;k<=n;k++)// 按照點權來排序使用最大的邊權for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(g[i][j]>max(g[i][e[k].id],g[e[k].id][j])){ // 當前的大于 [i,e[k].id] 和 [e[k].id,j]g[i][j] = max(g[i][e[k].id],g[e[k].id][j]);f[i][j] = min(f[i][j],g[i][j]*max({w[i],w[j],e[k].w}));}// 由于我們是按照點權去跑的k如果當前的百年大于i,j的話說明前面有更小的點和更小的邊權for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i==j) f[i][j]=0;if(f[i][j]>1e18) f[i][j]=-1;cout << f[i][j] << ' ';}cout << endl;}return ;
}

C.傳染病統計

暴力

看起來我們需要思考一下性質考慮并查集啥的但是注意到數據范圍,我們直接排序之后對于每一個數一直左右跑即可

int a[15];void solve(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];sort(a+1,a+1+n);int smax = 0, smin = n;for(int i=1;i<=n;i++){int j= i+1;int cnt = 1;while(j<=n and a[j]-a[j-1]<=2){cnt++;j++;}j=i-1;while(j>=1 and a[j+1]-a[j]<=2){cnt++;j--;}smax=max(smax,cnt);smin=min(smin,cnt);}cout << smin << ' ' << smax << endl;return ;
}

D.阿強與網格

數學小推理

對于數據范圍我們可以發現肯定是要推出一些小式子的在o(1)的時間復雜度解決這個問題

對于特例可以直接判斷,重合的,只有一條線的,我們可以作圖模擬一下,當我的點沒有抵達n,m同行或者同列的時候從可以直接跳min(n,m)-1到同一層,接著發現如果(n+m)是偶數的話是可以直接跳過去的否則就是必須走一步,對于到了同一層之后我們發現后面的跳和走步數是一樣的就是做差,最優解就是 1.一直走過去 2.一直跳過去 3.跳過去之后走

int t,n,m,x,y;void solve(){cin>>n>>m>>x>>y;if(n==1 and m==1){ // 重合的點直接輸出答案cout << 0 << endl;return ;}LL res1 = (LL)(n-1+m-1)*x; // 直接一步一步if(n==1 or m==1){ // 無法跳躍cout << res1 << endl;return ;}int ok = (n+m)%2;if(m>n) swap(n,m);int X = 1 + m-1 ,Y = m;LL res2 = (LL)(m-1)*y;LL cnt = n - X; // 步數if(cnt==0){ // 直接跳到了cout << min(res1,res2) << endl;return ;}if(ok){// 奇數 需要走一步res2 += min((LL)(cnt-1)*y+x,(LL)cnt*x);cout << min(res1,res2) << endl;}else{res2 += min((LL)cnt*y,(LL)cnt*x);cout << min(res1,res2) << endl;}return ;
}

E.生活大爆炸

小組合數公式

直接使用小范圍組合數公式暴力求解即可

LL C[M][M];void init(){for(int i=0;i<M;i++)for(int j=0;j<=i;j++)if(!j) C[i][j]=1;else C[i][j]=C[i-1][j]+C[i-1][j-1];
}
void solve(){cin>>n>>m>>t;LL ans = 0;for(int i=4;i<=n;i++)for(int j=1;j<=m;j++){if(i+j==t){ans += (LL)C[n][i]*C[m][j];}}cout << ans << endl;return ;
}

F.Capslock

簡單小模擬

使用islower(),toupper(),tolower()函數

void solve(){string s; cin>>s;n = s.size(); s=' '+s;int ok1 = islower(s[1]),cnt = 0;for(int i=1;i<=n;i++){if(isupper(s[i])) cnt++;}if(cnt==n){for(int i=1;i<=n;i++) s[i]=tolower(s[i]);}else if(ok1 and cnt==n-1){s[1] = toupper(s[1]);for(int i=2;i<=n;i++) s[i] = tolower(s[i]);}for(int i=1;i<=n;i++) cout << s[i];cout << endl;return ;
}

G.字節類型

大數比較

比較兩個大數,直接先數位后大小即可

string s[N]={"127","32767","2147483647","9223372036854775807"," "};
string ans[N]={"byte","short","int","long","BigInteger"};void solve(){auto check = [&](string&a,string&b){if(a.size()>b.size() or a==b) return true;if(a.size()<b.size()) return false;n = a.size();for(int i=0;i<n;i++){if(a[i]==b[i]) continue;return a[i]>b[i];}return true;};string a; cin>>a;for(int i=0;i<=4;i++){if(i==4 or check(s[i],a)){cout << ans[i] << endl;return ;}}return ;
}

H.制造游戲幣

有限制性的背包

可以發現要求有a的數量一定是大于b,說明,在買a的時候一定是要買b的有一個綁定的性質

我們可以建圖來確定綁定關系,明顯的如果說有環的話一定是無解的,他那個是注意到對于這個綁定性質可以使用dfs去跑,變成選這個物品要有的真實連帶花費

int dp[N],p[N];
LL w[N];
bool in[N];
vector<int> g[N];
int find(int x){if(x!=p[x]) p[x]=find(p[x]);return p[x];
}
void dfs(int u){for(auto&v:g[u]){w[v] += w[u];dfs(v);}if(!g[u].empty()) T -= w[u];// 表示嚴格的大于關系
}
void solve(){cin>>n>>m>>T;for(int i=1;i<=n;i++) cin>>w[i],p[i]=i;bool ok = false;while(m--){int a,b; cin>>a>>b;in[b]=true;g[a].push_back(b);int fa = find(a), fb = find(b);if(fa==fb){ok = true;}else{p[fa]=fb;}}if(ok){// 表示矛盾了cout << 0 << endl;return ;}for(int i=1;i<=n;i++) if(!in[i]) dfs(i);dp[0] = 1;for(int i=1;i<=n;i++)for(int j=w[i];j<=T;j++){dp[j] += dp[j-w[i]];dp[j] %= mod;}cout << dp[T] << endl;return ;
}

I.完美主義

線段樹

明顯的直接使用線段樹維護即可,bool表示當前區間是否可行,同時維護每個區間的左右端點數用于兩個區間結合的時候的判斷

int w[N];
struct code{int l,r;int lx,rx;bool ok;
}tr[4*N];void pushup(code&u,code&l,code&r){if(!l.ok or !r.ok) u.ok = false;else{if(l.rx<=r.lx){u.ok = true;}else{u.ok = false;}}u.lx = l.lx,u.rx = r.rx;
}void pushup(int u){pushup(tr[u],tr[u<<1],tr[u<<1|1]);
}void build(int u,int l,int r){if(l==r){tr[u]={l,r,w[l],w[l],1};return ;}tr[u]={l,r};int mid=l+r>>1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(u);
}void modify(int u,int v ,int x){if(tr[u].l== v && v==tr[u].r){tr[u].lx = x ;tr[u].rx = x;return ;}int mid=tr[u].l+tr[u].r>>1;if(v<=mid) modify(u<<1,v,x);if(v>mid) modify(u<<1|1,v,x);pushup(u);
}code query(int u,int l,int r){if(tr[u].l>=l && tr[u].r<=r){return tr[u];}int mid=tr[u].l+tr[u].r>>1;if(r<=mid) return query(u<<1,l,r);else if(l>mid) return query(u<<1|1,l,r);else{code res;code ll=query(u<<1,l,r);code rr=query(u<<1|1,l,r);pushup(res,ll,rr);return res;}
}
void solve(){cin>>n>>m;for(int i=1;i<=n;i++) cin>>w[i];build(1,1,n);while(m--){int op,l,r; cin>>op>>l>>r;if(op==1){modify(1,l,r);}else{code t = query(1,l,r);cout << (t.ok ? "Yes" : "No") << endl;}}return ;
}

L.神奇的回答

簡單模擬

void solve(){int x; cin>>x;if(x<18) cout << x << endl;else cout << 18 << endl;return ;
}

M.比賽!

topsort

按照題目映射一下直接跑topsort即可

int idx;
vector<int> g[N];
int in[N];
int q[N];
bool use[M][M];
void solve(){cin>>n;while(n--){char a,op,b,c;cin>>a>>op>>b>>c;if(!mp.count(a)){mp[a]=++idx;G[idx]=a;}if(!mp.count(b)){mp[b]=++idx;G[idx]=b;}if(!mp.count(c)){mp[c]=++idx;G[idx]=c;}int A = mp[a], B = mp[b] , C = mp[c];in[A]++,in[C]++;g[B].push_back(A);g[A].push_back(C); }vector<int> ans;auto topsort = [&](){queue<int> q;for(int i=1;i<=idx;i++) if(!in[i]) q.push(i);while(!q.empty()){int u = q.front(); q.pop();ans.push_back(u);for(auto&v:g[u]){if(--in[v]==0) q.push(v);}}return (int)ans.size() == idx;};if(topsort()){for(auto&v:ans) cout << G[v];cout << endl;}else{cout << "No Answer" << endl;} return ;
}

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

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

相關文章

AI模型:開源VS閉源,誰主沉浮?

簡介&#xff1a;評價一個AI模型“好不好”“有沒有發展”&#xff0c;首先就躲不掉“開源”和“閉源”兩條發展路徑。對于這兩條路徑&#xff0c;你更看好哪一種呢&#xff1f; 開源AI模型的優點。 開源AI模型的最大優勢在于其開放性和可訪問性。通過將AI模型的源代碼公開&a…

java學習四

Random 隨機數 數組 靜態初始化數組 數組在計算機中的基本原理 數組的訪問 什么是遍歷 數組的動態初始化 動態初始化數組元素默認值規則 Java內存分配介紹 數組在計算機中的執行原理 使用數組時常見的一個問題 案例求數組元素最大值 public class Test1 {public static void ma…

<工控><PLC>匯川Easy521系列PLC與匯川SV630N伺服進行EtherCat通訊的相關配置及指令編寫

前言 本系列是關于PLC相關的博文&#xff0c;包括PLC編程、PLC與上位機通訊、PLC與下位驅動、儀器儀表等通訊、PLC指令解析等相關內容。 PLC品牌包括但不限于西門子、三菱等國外品牌&#xff0c;匯川、信捷等國內品牌。 除了PLC為主要內容外&#xff0c;PLC相關元器件如觸摸屏…

父子級分類統計分類下數量sql

1 SELECTA.* FROM(SELECTA.project_id,COALESCE ( A.category_id, 0 ) category_id,( -- 其它沒有查詢的分類, 就會是null, 所以會歸為其它CASEWHEN COALESCE ( A.category_name, 其他分類 ) 其他分類 THEN 其他 WHEN COALESCE ( A.category_name, 其他分類 ) 強電系統 THE…

【Unity3D美術】URP渲染管線學習01

掃盲簡介 URP渲染管線是Unity3d提供的一種視覺效果更好的渲染模式&#xff0c;類似的還有Built RP&#xff08;默認最普通的渲染模式&#xff09;\ HDRP(超高清&#xff0c;對設備要求高)&#xff0c;視覺效果好&#xff0c;而且占用資源少&#xff01;成為主流渲染管線模式&a…

基于Docker部署GitLab環境搭建

文件在D:\E\學習文檔子目錄壓縮\專項進階&#xff0c;如ngnix,webservice,linux,redis等\docker 建議虛擬機內存2G以上 1.下載鏡像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意&#xff1a;一定要配置阿里云的加速鏡像 創建GitLab 的配置 (etc) 、 日志 (log) 、數…

成功案例(IF=7.4)| 代謝組+16s聯合分析助力房顫代謝重構的潛在機制研究

研究背景 心房顫動&#xff08;AF&#xff09;是臨床上最常見的持續性心律失常&#xff0c;具有顯著的發病率和死亡率。高齡是房顫發病率、患病率和進展最顯著的危險因素。與年齡在50-59歲之間的參與者相比&#xff0c;80-89歲之間的參與者患房顫的風險增加了9.33倍。目前尚不…

nss刷題(3)

1、[SWPUCTF 2021 新生賽]include 根據提示傳入一個file后顯示了關于flag的代碼 這是一個文件包含&#xff0c;考慮php偽協議&#xff0c;構造payload&#xff1a; ?filephp://filter/readconvert.base64-encode/resourceflag.php 2、[SWPUCTF 2021 新生賽]Do_you_know_http …

Css 提高 - 獲取DOM元素

目錄 1、根據選擇器來獲取DOM元素 2.、根據選擇器來獲取DOM元素偽數組 3、根據id獲取一個元素 4、通過標簽類型名獲取所有該標簽的元素 5、通過類名獲取元素 目標&#xff1a;能查找/獲取DOM對象 1、根據選擇器來獲取DOM元素 語法&#xff1a; document.querySelector(css選擇…

cmake uninstall like

如果有install_manifest.txt cat install_manifest.txt | sudo xargs rm #cat install_manifest.txt | xargs ls建議make install之前查看有沒有make uninstall目標

cocos 寫 連連看 小游戲主要邏輯(Ts編寫)算法總結

cocos官方文檔&#xff1a;節點系統事件 | Cocos Creator 游戲界面展示 一、在cocos編譯器隨便畫個頁面 展示頁面 二、連連看元素生成 2.1、準備單個方塊元素&#xff0c;我這里就是直接使用一張圖片&#xff0c;圖片大小為100x100&#xff0c;錨點為&#xff08;0&#xff0…

ESP32基礎應用之使用手機瀏覽器作為客戶端與ESP32作為服務器進行通信

文章目錄 1 準備2 移植2.1 softAP工程移植到simple工程中2.2 移植注意事項 3 驗證4 添加HTML4.1 瀏覽器顯示自己編譯的html4.2 在使用html發數據給ESP324.3 HTML 內容4.4 更新 html_test.html 1 準備 參考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\getting_sta…

PMapper:助你在AWS中實現IAM權限快速安全評估

關于PMapper PMapper是一款功能強大的腳本工具&#xff0c;該工具本質上是一個基于Python開發的腳本/代碼庫&#xff0c;可以幫助廣大研究人員識別一個AWS賬號或AWS組織中存在安全風險的IAM配置&#xff0c;并對IAM權限執行快速評估。 PMapper可以將目標AWS帳戶中的不同IAM用戶…

Hive環境搭建

1 安裝Hive 下載文件 # wget -P /opt/ https://mirrors.huaweicloud.com/apache/hive/hive-2.3.8/apache-hive-2.3.8-bin.tar.gz 解壓縮 # tar -zxvf /opt/apache-hive-2.3.8-bin.tar.gz -C /opt/ 修改hive文件夾名字 # mv /opt/apache-hive-2.3.8-bin /opt/hive 配置環境變量 …

torch Embedding 學習筆記

文本向量化&#xff08;Text Embedding&#xff09;&#xff1a;將文本數據&#xff08;詞、句子、文檔&#xff09;表示成向量的方法。 詞向量化將詞轉為二進制或高維實數向量&#xff0c;句子和文檔向量化則將句子或文檔轉為數值向量&#xff0c;通過平均、神經網絡或主題模…

幀動畫播放出現oom異常分析及解決

問題描述 需要播放序列幀&#xff0c;幀數特別多的時候會oom 問題分析 源代碼每一幀都創建一次bitmap&#xff0c;極度消耗內存 bitmap.recycle并不會立刻回收內存&#xff0c;內存還是會很緊張 問題解決 利用inbitmap&#xff0c;每一幀復用同一片內存區域 //設置Bitmap…

【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型

【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型 前言 今天來寫一個簡單的ernie-c#的例子&#xff0c;主要參考了百度智能云的例子&#xff0c;然后自己改了改&#xff0c;學習了ERNIE模型的鑒權方式&#xff0c;數據流的格式和簡單的數據解析&#xff0c;實…

軟件安裝:Linux安裝Nginx

軟件安裝&#xff1a;Linux如何安裝軟件&#xff0c;程序。 源碼安裝 類似于.exe 源碼包就是一堆源代碼程序組成的。 linux tar.gz 這個就是源碼包 源碼包--------二進制包&#xff0c;源碼包里面的代碼經過編譯之后形成的包。 優點&#xff1a;1、開源&#xff0c;可以二次…

面試八股之MySQL篇1——慢查詢定位篇

&#x1f308;hello&#xff0c;你好鴨&#xff0c;我是Ethan&#xff0c;一名不斷學習的碼農&#xff0c;很高興你能來閱讀。 ??目前博客主要更新Java系列、項目案例、計算機必學四件套等。 &#x1f3c3;人生之義&#xff0c;在于追求&#xff0c;不在成敗&#xff0c;勤通…

JavaScript 數組方法總結

JavaScript 數組方法總結 創建數組訪問和修改數組&#xff08;長度 &#xff06; 元素&#xff09;添加和刪除元素數組遍歷元素查找過濾和映射歸并和縮減數組的連接數組的扁平化數組的排序數組的反轉數組的復制數組的測試數組的填充 創建數組 Array.of(...elements): 創建一個…