AtCoder Beginner Contest 333(A,B,C,D,E,F)

AtCoder Beginner Contest 333

A

題意

輸出n個n(n<=9)

代碼

#include<bits/stdc++.h>
using namespace std;
void solve(){int n;cin>>n;for(int i=1;i<=n;i++)cout<<n;
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

B

題意

給定一個正五邊形ABCDE,現在給定兩條邊問兩條邊是否相等

思路

在正五邊形里面邊長分為兩類,一類是相鄰的節點連邊(如AB,BC,CD,DE,EA),另一類是不相鄰的節點連邊(如AC,AD,BD,BE,CE)如果兩條邊處在同一類中則邊長相等

代碼

#include<bits/stdc++.h>
using namespace std;
void solve(){string line1,line2;cin>>line1>>line2;int len1=abs(line1[1]-line1[0]);int len2=abs(line2[1]-line2[0]);if(len1==len2)cout<<"Yes\n";else if((len1+len2)%5==0)cout<<"Yes\n";else cout<<"No\n";
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

C

題意

一個集合A中有{1,11,111,1111,…},需要在集合A中選出三個數(可以相同)相加后組成一個新的數x,將x放入集合B中,集合B內部按照從小到大的順序排列,問集合中第N小的元素是什么

思路

直接暴力三層循環選出三個元素相加后放入數組中,然后對整個數組排序即可

代碼

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){vector<int>res;for(int i=1;i<=1e18;i=10*i+1){for(int j=i;j<=1e18;j=10*j+1){for(int k=j;k<=1e18;k=10*k+1){res.push_back(i+j+k);}}}sort(res.begin(),res.end());int x;cin>>x;cout<<res[x-1]<<"\n";
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

D

題意

給定一棵樹,每次可以刪除一個葉子節點及其相連邊,問至少需要刪多少次才能刪除節點1

思路

如果1是葉子節點,那么可以直接1步刪除

考慮整棵樹以1為根,如果要使得1號節點被刪除,就意味著要刪到1號節點為葉子節點的時候,那么對于1號節點的所有兒子節點為根的子樹來說,這些子樹最多只能保留一個,剩余的子樹上的節點需要全部刪除,考慮到刪除節點要最小,所以我們保留1號節點的兒子節點中最大的那一棵子樹即可。求子樹大小簡單寫一個dfs即可

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

(如圖:子樹1>子樹3>子樹4>子樹2,那么最優方案 一定是把子樹1保留,剩下所有子樹上的節點全部刪除)

代碼

#include<bits/stdc++.h>
using namespace std;
const int mxn=1e6+5;
int siz[mxn];
vector<int>edge[mxn];
void dfs(int u,int fa){siz[u]=1;for(auto v:edge[u]){if(v==fa)continue;dfs(v,u);siz[u]+=siz[v];}
}
void solve(){int n;cin>>n;for(int i=1;i<n;i++){int u,v;cin>>u>>v;edge[u].push_back(v);edge[v].push_back(u);}dfs(1,0);int res=n-1;for(auto v:edge[1])res=min(res,n-siz[v]);cout<<res<<"\n";
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

E

題意

Takahashi在冒險中遇到N個事件,每個事件由(op,x)組成,如果op=1說明這個地方有一瓶類型為x的藥水,如果op=2說明遇到怪物并且需要用x類型藥水才能打敗他,否則會被打敗

問在滿足不被怪物打敗的前提下,需要用背包裝藥水,問背包的容量最小為多少

思路

考慮貪心,每瓶藥在打怪之前最后出現位置才會拿。那么我們只需要從最后往前找即可

代碼

#include<bits/stdc++.h>
using namespace std;
void solve(){int n;cin>>n;vector<pair<int,int>>a(n+10);for(int i=1;i<=n;i++)cin>>a[i].first>>a[i].second;vector<int>now(n+10,0);//在這之前需要取的藥vector<int>vis(n+10,0);//是否取for(int i=n;i>=1;i--){if(a[i].first==2)now[a[i].second]++;else{if(now[a[i].second]>=1)now[a[i].second]--,vis[i]=1;}}for(int i=1;i<=n;i++){if(now[i]>0){cout<<"-1\n";return;}}int maxv=0,nowv=0;//最大容量for(int i=1;i<=n;i++){if(a[i].first==1)nowv+=vis[i];else nowv--;maxv=max(maxv,nowv);}cout<<maxv<<"\n";for(int i=1;i<=n;i++){if(a[i].first==1)cout<<vis[i]<<" ";}
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

F

題意

有序號為1,2…n號人在排隊, 每一次對隊首的人進行操作,隊首的人有1/2的概率出隊,還有1/2的概率回到隊尾,問第i個人是最后一個留在隊列中的概率

思路

消元類概率 dp 經典問題

我們發現實際上無論隊伍里面的人序號是什么,我們只關心當前隊列中有多少個人,最后勝出的是排在第幾個位置上的人

先考慮我們當前知道什么?我們知道如果隊列中只有一個人,那么他必勝

再考慮我們需要求什么?在有n個人的隊伍中每個位置上的人獲勝的概率

所以我們現在已知最后的結束狀態值,我們想求初始狀態的值

因為操作可逆,所以我們可以把題意改成每一次有1/2的概率在隊首加上一個人,有1/2的概率將隊尾元素放到隊首。那么我們就可以很順其自然的推狀態

dp[i][j]dp[i][j]dp[i][j]為當前中有i個人,其中第j個人最后勝利的概率

在這里插入圖片描述

那么就有轉移方程dp[i][j]=12×dp[i?1][j?1]+12×dp[i][j?1]dp[i][j]=\frac {1}{2}\times dp[i-1][j-1]+\frac {1}{2}\times dp[i][j-1]dp[i][j]=21?×dp[i?1][j?1]+21?×dp[i][j?1]

(當前狀態可以是原先狀態在隊首加上一個人,也可以是將隊尾的人放到隊首得到的)

但我們會發現這樣轉移有一個位置不對,如果我們當前要求的是隊伍中第一個人獲勝的概率(即求dp[i][1]),那么這個人顯然不可能是從原先第0個人轉移過來的(dp[i-1][j-1]=dp[i-1][0]=0),而是從隊尾移到隊首的(即是從dp[i][i])轉移過來的(在實際的意義中我們其實也不難發現隊首的這個人出隊以后就不會對后續隊列中的人產生影響)

所以最終的轉移方程應該為
dp[i][j]={12×dp[i?1][j?1]+12×dp[i][j?1](j≠1)12×dp[i][i](j=1)dp[i][j]= \begin{cases} \frac {1}{2}\times dp[i-1][j-1]+\frac {1}{2}\times dp[i][j-1]&(j\neq 1) \\ \frac {1}{2}\times dp[i][i]&(j=1) \end{cases} dp[i][j]={21?×dp[i?1][j?1]+21?×dp[i][j?1]21?×dp[i][i]?(j=1)(j=1)?
狀態轉移方程的確定僅僅是開始

我們意識到這個轉移方程不滿足無后效性的遞推條件

因為在轉移中dp[i][1]需要用到dp[i][i]的狀態,dp[i][2]要用到dp[i][1]的狀態…dp[i][i]要用到dp[i][i-1]的狀態,那么很成功的一下子整層狀態都鎖住了

但我們發現成環的部分i都相同,也就是說是在同一層的狀態,我們能否假定一個當前未知的狀態的值把環上所有狀態表示出來?

答案是肯定的

假定dp[i][1]是已知條件,則有
{dp[i][1]=dp[i][1]dp[i][2]=dp[i?1][1]2+dp[i][1]2dp[i][3]=dp[i?1][2]2+dp[i][2]2=dp[i?1][2]2+dp[i?1][1]2+dp[i][1]22=dp[i?1][2]2+dp[i?1][1]4+dp[i][1]4....dp[i][i]=dp[i?1][i?1]2+dp[i?1][i?2]4+dp[i?1][i?3]8+....+dp[i?1][1]2i?1+dp[i][1]2i?1\begin{cases} dp[i][1]=dp[i][1] \\ dp[i][2]=\frac {dp[i-1][1]}{2}+\frac {dp[i][1]}{2} \\ dp[i][3]=\frac {dp[i-1][2]}{2} +\frac {dp[i][2]}{2}=\frac {dp[i-1][2]}{2}+\frac {\frac {dp[i-1][1]}{2}+\frac {dp[i][1]}{2}}{2}=\frac {dp[i-1][2]}{2}+\frac {dp[i-1][1]}{4}+\frac {dp[i][1]}{4} \\ .... \\ dp[i][i]=\frac {dp[i-1][i-1]}{2}+\frac {dp[i-1][i-2]}{4}+\frac {dp[i-1][i-3]}{8}+....+\frac {dp[i-1][1]}{2^{i-1}}+\frac {dp[i][1]}{2^{i-1}} \end{cases} ????dp[i][1]=dp[i][1]dp[i][2]=2dp[i?1][1]?+2dp[i][1]?dp[i][3]=2dp[i?1][2]?+2dp[i][2]?=2dp[i?1][2]?+22dp[i?1][1]?+2dp[i][1]??=2dp[i?1][2]?+4dp[i?1][1]?+4dp[i][1]?....dp[i][i]=2dp[i?1][i?1]?+4dp[i?1][i?2]?+8dp[i?1][i?3]?+....+2i?1dp[i?1][1]?+2i?1dp[i][1]??

又因為?dp[i][1]=12×dp[i][i]所以就有?dp[i][1]=dp[i?1][i?1]4+dp[i?1][i?2]8+dp[i?1][i?3]16+?+dp[i?1][1]2i+dp[i][1]2i即?dp[i][1]=∑k=1i?112i?k+1×dp[i?1][k]+dp[i][1]2i移項后得到?(2i?1)×dp[i][1]=2i×∑k=1i?112i?k+1×dp[i?1][k]即?dp[i][1]=2i2i?1×∑k=1i?112i?k+1×dp[i?1][k]\begin{aligned} &\text{又因為 } dp[i][1] = \frac{1}{2} \times dp[i][i] \\ &\text{所以就有 } dp[i][1] = \frac{dp[i-1][i-1]}{4} + \frac{dp[i-1][i-2]}{8} + \frac{dp[i-1][i-3]}{16} + \cdots + \frac{dp[i-1][1]}{2^i} + \frac{dp[i][1]}{2^i} \\ &\text{即 } dp[i][1] = \sum_{k=1}^{i-1} \frac{1}{2^{i-k+1}} \times dp[i-1][k] + \frac{dp[i][1]}{2^i} \\ &\text{移項后得到 } (2^i - 1) \times dp[i][1] = 2^i \times \sum_{k=1}^{i-1} \frac{1}{2^{i-k+1}} \times dp[i-1][k] \\ &\text{即 } dp[i][1] = \frac{2^i}{2^i - 1} \times \sum_{k=1}^{i-1} \frac{1}{2^{i-k+1}} \times dp[i-1][k] \end{aligned} ?又因為?dp[i][1]=21?×dp[i][i]所以就有?dp[i][1]=4dp[i?1][i?1]?+8dp[i?1][i?2]?+16dp[i?1][i?3]?+?+2idp[i?1][1]?+2idp[i][1]??dp[i][1]=k=1i?1?2i?k+11?×dp[i?1][k]+2idp[i][1]?移項后得到?(2i?1)×dp[i][1]=2i×k=1i?1?2i?k+11?×dp[i?1][k]?dp[i][1]=2i?12i?×k=1i?1?2i?k+11?×dp[i?1][k]?

經過這么一番處理我們發現,每一層的dp[i][1]實際上只和i-1層的狀態有關,所以可以直接處理出來

那么已知dp[i][1]的狀態,第i層的所有狀態也就可以遞推處理出來了

至此我們可以將轉移方程更新為:
dp[i][j]={12×dp[i?1][j?1]+12×dp[i][j?1](j≠1)2i2i?1×∑k=1i?112i?k+1×dp[i?1][k]dp[i][j]= \begin{cases} \frac {1}{2}\times dp[i-1][j-1]+\frac {1}{2}\times dp[i][j-1]&(j\neq 1) \\ \frac{2^{i}}{2^{i}-1}\times\sum _{k=1}^{i-1}{\frac{1}{2^{i-k+1}}\times dp[i-1][k]} \end{cases} dp[i][j]={21?×dp[i?1][j?1]+21?×dp[i][j?1]2i?12i?×k=1i?1?2i?k+11?×dp[i?1][k]?(j=1)
初始已知dp[1][1]=1dp[1][1]=1dp[1][1]=1,最后要求的是f[n][1],f[n][2],f[n][3]......f[n][n]f[n][1],f[n][2],f[n][3]......f[n][n]f[n][1],f[n][2],f[n][3]......f[n][n]

代碼

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=998244353,mxn=3e3+5;
int dp[mxn][mxn];
int fastpow(int a,int power=mod-2){int res=1;while(power){if(power&1)res=res*a%mod;a=a*a%mod;power>>=1;}return res;
}
int inv(int x){return fastpow(x);}
void solve(){int n;cin>>n;int inv2=inv(2);dp[1][1]=1;for(int i=2;i<=n;i++){for(int k=1;k<=i-1;k++)dp[i][1]+=inv(fastpow(2,i-k+1))*dp[i-1][k]%mod,dp[i][1]%=mod;//先求dp[i][1]dp[i][1]=dp[i][1]*fastpow(2,i)%mod*inv((fastpow(2,i)-1+mod)%mod)%mod;for(int j=2;j<=i;j++)dp[i][j]=(inv2*dp[i-1][j-1]%mod+inv2*dp[i][j-1]%mod)%mod;}for(int i=1;i<=n;i++)cout<<dp[n][i]<<" ";
}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T__=1;//cin>>T__;while(T__--)solve();return 0;
}

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

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

相關文章

留學真相:凌晨兩點被海關攔下時,我才明白人生沒有退路

> 獨立不是選擇&#xff0c;而是生存的必修課下飛機那一刻&#xff0c;幻想中的“鍍金生活”瞬間崩塌。倫敦海關凌晨兩點的燈光下&#xff0c;你顫抖著翻找學校文件&#xff0c;手機信號格空空如也&#xff1b;大巴誤點后&#xff0c;你拖著兩個32公斤的行李箱站在陰雨中&am…

探索AIGC領域DALL·E 2的圖像生成與人類創意的融合

探索AIGC領域DALLE 2的圖像生成與人類創意的融合關鍵詞&#xff1a;AIGC、DALLE 2、圖像生成、人類創意、創意融合摘要&#xff1a;本文聚焦于AIGC領域中DALLE 2的圖像生成技術與人類創意的融合。首先介紹了相關背景&#xff0c;包括DALLE 2的發展歷程和人類創意在藝術創作中的…

【ECharts】多個ECharts版本共存解決方案

多個ECharts版本共存解決方案 在單個HTML頁面中使用多個ECharts版本的關鍵在于避免全局命名空間沖突。下面我將展示一個完整的解決方案&#xff0c;包含兩種不同的實現方法。 解決方案思路命名空間隔離法&#xff1a; 使用不同的全局變量名保存不同版本的ECharts在加載新版本前…

力扣熱門算法題 204.計數質數,207.課程表,213.打家劫舍II

力扣熱門算法題 204.計數質數&#xff0c;207.課程表&#xff0c;213.打家劫舍II&#xff0c;每題做詳細思路梳理&#xff0c;配套Python&Java雙語代碼&#xff0c; 2025.07.07 可通過leetcode所有測試用例。 目錄 204.計數質數 解題思路 完整代碼 207.課程表 解題思…

深入理解 macOS 的 quarantine、xattr 與 Gatekeeper

在 macOS 上安裝第三方應用時&#xff0c;你是否遇到過如下提示&#xff1f; “xxx.app 已損壞&#xff0c;無法打開。”“無法打開‘xxx.app’&#xff0c;因為它來自身份不明的開發者。”“你確定要打開這個應用嗎&#xff1f;它是從互聯網下載的。” 這些提示背后&#xff0…

FastAPI學習筆記記錄

FastAPI 學習筆記 最近在公司中需要寫接口&#xff0c;選取了fastapi這個框架&#xff0c;一個原因是FastAPI 是主流框架&#xff0c;同時FastAPI 有著高性能&#xff0c;支持異步和高并發。 FastAPI 安裝 直接用下面兩行命令進行安裝 pip3 install fastapi pip install uvicor…

HTML(上)

1.web標準主要包括結構(Structure)、表現(Presentation)和行為(Behavior)三個方面。1.1 結構結構用于對網頁元素進行整理和分類&#xff0c;核心技術&#xff1a;HTML。 HTML (HyperText Markup Language)&#xff1a;超文本標記語言&#xff0c;用于定義網頁的內容和結構&…

杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析

杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析 文章目錄杭州樂灣科技有限公司的背景、產品體系與技術能力的全方位深度分析**一、公司背景&#xff1a;智慧養老賽道領跑者****1. 基礎信息****2. 發展里程碑****二、產品體系&#xff1a;全域智慧養老解決方案…

kettle從入門到精通 第101課 ETL之kettle DolphinScheduler調度kettle

1、下載DolphinSchedulerDolphinScheduler官網下載安裝包&#xff0c;選擇合適的版本進行下載&#xff0c;地址為https://dolphinscheduler.apache.org/zh-cn/docs/3.1.9/guide/installation/standalone2、啟動 DolphinScheduler Standalone Server我這里僅僅為了測試使用&…

微信小程序121~130

1.小程序功能開發-首頁功能 通過并發請求獲取首頁的數據。 // 導入封裝的網絡請求模塊實例 import http from ../utils/http // 定義接口api函數 export const reqIndexData () > {// 通過方式請求并獲取首頁數據&#xff0c;提升頁面渲染速度// 通過Promise.all進行并發請…

Java Stream流:高效數據處理全解析

Java Stream 流詳解 Stream 是 Java 8 引入的 API&#xff0c;用于高效處理集合數據&#xff08;如 List、Set、Map 等&#xff09;。它支持函數式編程風格&#xff0c;能實現復雜的查詢、過濾、映射等操作&#xff0c;并支持并行處理以提升性能。核心特點 非存儲數據結構&…

光子精密雙目3D線激光輪廓測量儀,擺脫視覺盲區,1臺更比2臺強!

光子精密雙目3D線激光輪廓測量儀&#xff08;GL-8160D&#xff09;&#xff0c;在GL-8000系列的基礎上創新升級。GL-8160D采用全新雙目單線設計&#xff0c;突破傳統3D視覺檢測限制&#xff0c;而且不受外部拼接標定誤差影響&#xff0c;有效消除單目盲區&#xff0c;抗光干擾能…

基于Linux驅動的可見光通信方案 —— 開源 OpenVLC 平臺入門(附 BeagleBone Black 驅動簡單解析)

60 美元玩轉 Li-Fi —— 開源 OpenVLC 平臺入門&#xff08;附 BeagleBone Black 及驅動解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的開源可見光通信&#xff08;VLC / Li-Fi&#xff09;研究平臺。它把硬件、驅動、協議棧…

Git系列--4.Git分支設計規范

目錄 一、了解開發環境 1.1概念闡述 1.2系統概括圖 二、設計規范之GitFlow模型 2.1具體分支概念 2.1.1master 分? 2.1.2release 分? 2.1.3develop 分? 2.1.4feature 分? 2.1.5hotfix 分? 2.2宏觀表格 三、分支流程圖 一、了解開發環境 1.1概念闡述 對于開發人員…

【時間之外】AI在農機配件設計場景的應用

目錄 農機制造業痛點 AI場景暢想 落后就要挨打 農機制造業痛點 最近&#xff0c;我與一位在制造業摸爬滾打多年的老友相聚。酒過三巡&#xff0c;話題漸漸轉到他的事業上。他興致勃勃地跟我講起&#xff0c;自己正主導著一個規模達幾千萬的項目&#xff0c;生產基地遠在孟加…

基于定制開發開源AI智能名片與S2B2C商城小程序的旅游日志創新應用研究

摘要&#xff1a;本文探討了旅游日志在記錄旅行美景與人物中的重要性&#xff0c;結合當下數字化發展趨勢&#xff0c;引入定制開發開源AI智能名片與S2B2C商城小程序的概念。分析如何將這兩者與旅游日志風格元素相融合&#xff0c;打造一種創新的旅游記錄與分享模式&#xff0c…

XGBoosting算法詳解(Boosting思想的代表算法)

文章目錄相關文章一、Boosting思想&#xff1a;從弱到強的串行提升二、XGBoost算法思想&#xff1a;GBDT的極致優化三、XGBoost數學原理&#xff1a;從目標函數到樹分裂3.1 目標函數定義3.2 正則化項&#xff1a;控制樹的復雜度3.3 泰勒二階展開&#xff1a;簡化目標函數3.4 化…

Vue + Element UI 實現選框聯動進而動態控制選框必填

目錄 一. 需求描述 二. 解決思路 三. 代碼實現 四. 效果展示 一. 需求描述 如下圖所示&#xff0c;新增人員頁面&#xff0c;有字段"Leader DS"和"Leader DS名稱"。 現在我要在字段"Leader DS"和"Leader DS名稱"字段下方再添加一…

高通SG882G平臺(移遠),Ubuntu22編譯:1、下載代碼

不要使用Ubuntu24&#xff0c;不穩定。 docker聽著美好&#xff0c;其實也有問題。比如你給別人的時候&#xff0c;虛擬機直接給過去&#xff0c;馬上就能用。 安裝工具 sudo apt-get install -y \ diffstat xmlstarlet texinfo chrpath gcc-aarch64-linux-gnu libarchive-d…

Android音視頻探索之旅 | C++層使用OpenGL ES實現視頻渲染

一.前言 在學習音視頻的過程中&#xff0c;實現視頻渲染是非常常見的&#xff0c;而渲染的方式也挺多&#xff0c;可以使用Java層的OpenGL ES進行圖形渲染&#xff0c;也可以使用Ffmpeg來顯示&#xff0c;還有就是通過C層的OpenGL ES來進行渲染。OpenGL ES是OpenGL三維圖形API…