Codeforces Round 903 (Div. 3)A~F

A.Don't Try to Count

輸入樣例:

12
1 5
a
aaaaa
5 5
eforc
force
2 5
ab
ababa
3 5
aba
ababa
4 3
babb
bbb
5 1
aaaaa
a
4 2
aabb
ba
2 8
bk
kbkbkbkb
12 2
fjdgmujlcont
tf
2 2
aa
aa
3 5
abb
babba
1 19
m
mmmmmmmmmmmmmmmmmmm

輸出樣例:

3
1
2
-1
1
0
1
3
1
0
2
5

思路:簽到題,但要注意當字符串a的長度大于2倍的b長度還沒有子串b時,說明a中不可能出現子串b,要退出循環。?

代碼:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{int t;cin>>t;while(t--){int n,m;cin>>n>>m;string a,b;cin>>a>>b;int cnt=0,f=0;while(a.find(b)==string::npos){a+=a;cnt++;if(a.size()>2*m&&a.find(b)==string::npos){cout<<-1<<endl;f=1;break;}}if(!f)cout<<cnt<<endl;}
}

B. Three Threadlets?

輸入樣例:

15
1 3 2
5 5 5
6 36 12
7 8 7
6 3 3
4 4 12
12 6 8
1000000000 1000000000 1000000000
3 7 1
9 9 1
9 3 6
2 8 2
5 3 10
8 4 8
2 8 4

輸出樣例:

YES
YES
NO
NO
YES
YES
NO
YES
NO
NO
YES
YES
NO
YES
NO

思路:找規律,通過模擬樣例可以發現三根線要一樣長,那么最終長度肯定是要與最短的那根線一樣長,如果某根線不能剪成最短長度,說明這根線不能被最短的長度整除,直接輸出NO就可以了,如果能被整除,那么比較這兩根線的長度和/最短長度得到的結果是否會大于3,大于就輸出NO,反之YES。

代碼:

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{int t;cin>>t;while(t--){vector<int> v(3);int f=0,cnt=0;for(auto &it:v) cin>>it;sort(v.begin(),v.end());f=(v[1]%v[0]||v[2]%v[0]);if(f) puts("NO");else{cnt=v[1]/v[0]-1+(v[2]/v[0]-1);if(cnt<=3) puts("YES");else puts("NO");}}
}

C. Perfect Square

輸入樣例:

5
4
abba
bcbb
bccb
abba
2
ab
ba
6
codefo
rcesco
deforc
escode
forces
codefo
4
baaa
abba
baba
baab
4
bbaa
abba
aaba
abba

輸出樣例:

1
2
181
5
9

思路:?因為題目要求矩陣翻轉90°之后仍保持不變,說明矩陣的每一條邊上的字母都得一樣,所以我們可以通過從上往下的每一行的邊與另外三條邊上對應的元素進行比較(總共只需要遍歷n/2行),因為只能將字母變大,所以我們要找到這四條邊中最大的字母是哪個,然后另外三個字母就變成這個最大字母maxd,變化次數為4*maxd-(a1+a2+a3),然后我們要記得將原位置更小的字母改成更大的字母,具體可看代碼。

代碼:

#include<iostream>
using namespace std;
const int N=1e3+5;
char a[N][N];
int main()
{int t;cin>>t;while(t--){int n,sum=0;cin>>n;for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j];for(int i=1;i<=n/2;i++)for(int j=1+i-1;j<=n-i;j++){int a1=a[i][j]-'a'; //cout<<a1<<' ';int a2=a[n-j+1][i]-'a'; //cout<<a2<<' ';int a3=a[n-i+1][n-j+1]-'a';// cout<<a3<<' ';int a4=a[j][n-i+1]-'a'; //cout<<a4<<' ';int maxd=max(a1,max(a2,a3));maxd=max(maxd,a4);sum+=4*maxd-(a1+a2+a3+a4);if(a1!=maxd)a[i][j]+=maxd-a1;if(a2!=maxd)a[n-j+1][i]+=maxd-a2;if(a3!=maxd)a[n-i+1][n-j+1]+=maxd-a3;if(a4!=maxd)a[j][n-i+1]+=maxd-a4;// cout<<maxd<<' '<<sum<<' '<<a1+a2+a3+a4<<endl;// cout<<maxd<<' '<<a[4][2]<<endl;//puts("");}cout<<sum<<endl;}
}

D. Divide and Equalize

輸入樣例:

7
5
100 2 50 10 1
3
1 1 1
4
8 2 4 2
4
30 50 27 20
2
75 40
2
4 4
3
2 3 1

輸出樣例:

YES
YES
NO
YES
NO
YES
NO

思路:?這道題一開始沒什么思路,后面看了一些大佬的題解才恍然大悟(heheh( ̄▽ ̄)"終歸還是我太菜了),首先我們要知道每個大于1的數都可以分解成幾個質因數的乘積,那么這道題的操作是一個數除k的同時另一個數乘k,因數的個數是不會變的,我們可以將其看成因數的轉移,所以這n個數中每個質因數的個數如果為n的整數倍則可以將他們變成一樣的數,否則不能。

代碼:

#include<iostream>
#include<map>
using namespace std;int main()
{ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int t;cin>>t;while(t--){int n;cin>>n;map<int,int> h;for(int i=0;i<n;i++){int x;cin>>x;for(int m=2;m<=x/m;m++){while(x%m==0){h[m]++;x/=m;}}if(x>1) h[x]++;}int f=0;for(auto it:h){if(it.second%n!=0){f=1;break;}}if(f) puts("NO");else puts("YES");}
}

E. Block Sequence

輸入樣例:

7
7
3 3 4 5 2 6 1
4
5 6 3 2
6
3 4 1 6 7 7
3
1 4 3
5
1 2 3 4 5
5
1 2 3 1 2
5
4 5 5 1 5

輸出樣例:

0
4
1
1
2
1
0

思路:?這道題我們要從后往前dp,定義dp[i]為從n到i的最少操作次數,由題意可知我們對一個數字有兩種操作,刪除:dp[i]=dp[i+1]+1,保留 :dp[i]=dp[i+a[i]+1],我們只需要在這兩種操作中取最小值就可以了。

代碼:

#include<iostream>
#include<cstring>
using namespace std;
const int N=2e5+5;
int a[N],dp[N];
/*逆向dp*/
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int t;cin>>t;while(t--){int n;cin>>n;memset(dp,0,sizeof dp);for(int i=1;i<=n;i++) cin>>a[i];for(int i=n;i>=1;i--){dp[i]=dp[i+1]+1;//刪除if(i+a[i]<=n) dp[i]=min(dp[i],dp[i+a[i]+1]);//比較保留和刪除兩種操作}cout<<dp[1]<<endl;}
}

F. Minimum Maximum Distance

輸入樣例1:

6
7 3
2 6 7
1 2
1 3
2 4
2 5
3 6
3 7
4 4
1 2 3 4
1 2
2 3
3 4
5 1
1
1 2
1 3
1 4
1 5
5 2
4 5
1 2
2 3
1 4
4 5
10 8
1 2 3 4 5 8 9 10
2 10
10 5
5 3
3 1
1 7
7 4
4 9
8 9
6 1
10 9
1 2 4 5 6 7 8 9 10
1 3
3 9
9 4
4 10
10 6
6 7
7 2
2 5
5 8

輸出樣例1:

2
2
0
1
4
5

輸入樣例2:

3
6 1
3
1 2
1 3
3 4
3 5
2 6
5 3
1 2 5
1 2
1 3
2 4
3 5
7 1
2
3 2
2 6
6 1
5 6
7 6
4 5

輸出樣例2:

0
2
0

思路:?fi的最小值只會出現在兩個或多個標記頂點中間的點到標記頂點的最大距離,找兩個標記頂點的最大距離相當于找樹的直徑(傳送門),結果輸出(樹的直徑-1)/2+1。

代碼:

/*樹的直徑————兩次dfs第一次dfs算出所有結點到根節點的距離,到根節點最大距離的那個結點就是樹的直徑的一個端點第二次dfs以端點為根節點,算出其他點到直徑端點的距離,然后取距離最大的那個點即為直徑的另一個端點第二次dfs求到的到端點的最大距離即為樹的直徑*/#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int N=2e5+5;
int depth[N],mark[N];
vector<int> edge[N];
void dfs(int u,int fa)
{for(auto t:edge[u]){if(t==fa) continue;depth[t]=depth[u]+1;dfs(t,u);}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int t;cin>>t;while(t--){int n,k;cin>>n>>k; for(int i=1;i<=n;i++) edge[i].clear();//vector<int> edge[n];for(int i=1;i<=k;i++) cin>>mark[i];for(int i=1;i<n;i++) {int a,b;cin>>a>>b;edge[a].emplace_back(b),edge[b].emplace_back(a);}depth[1]=0;if(k==1){cout<<0<<endl;continue;}dfs(1,-1);int c=mark[1];for(int i=2;i<=k;i++) if(depth[mark[i]]>depth[c]) c=mark[i];//先求直徑的一個端點depth[c]=0;dfs(c,-1);//從這個被標記的端點出發找另一個端點c=mark[1];for(int i=2;i<=k;i++)if(depth[mark[i]]>depth[c]) c=mark[i];cout<<(depth[c]-1)/2+1<<endl;}
}

(將近半個月沒寫cf了,A題都讓我TLE了一發,暑假得刷起來了😂,話說學校暑假放得真晚,還在復習期末考試科目( ̄▽ ̄)"。。。

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

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

相關文章

1999-2022年企業持續綠色創新水平數據

企業持續綠色創新水平數據為研究者提供了評估企業在綠色技術領域創新持續性和能力的重要視角。以下是對企業持續綠色創新水平數據的介紹&#xff1a; 數據簡介 定義&#xff1a;企業持續綠色創新水平反映了企業在一定時期內綠色專利申請的持續性和創新能力。計算方法&#xf…

初識STM32:開發方式及環境

STM32的編程模型 假如使用C語言的方式寫了一段程序&#xff0c;這段程序首先會被燒錄到芯片當中&#xff08;Flash存儲器中&#xff09;&#xff0c;Flash存儲器中的程序會逐條的進入CPU里面去執行。 CPU相當于人的一個大腦&#xff0c;雖然能執行運算和執行指令&#xff0c;…

通信協議:常見的芯片內通信協議

相關閱讀 通信協議https://blog.csdn.net/weixin_45791458/category_12452508.html?spm1001.2014.3001.5482 本文將簡單介紹一些常見的芯片間通信協議&#xff0c;但不會涉及到協議的具體細節。 一、AMBA&#xff08;Advanced Microcontroller Bus Architecture&#xff09;…

MySQL之備份與恢復(七)

備份與恢復 文件系統快照 規劃LVM備份 LVM快照備份也是有開銷的。服務器寫到原始卷的越多&#xff0c;引發的額外開銷也越多。當服務器隨機修改許多不同塊時&#xff0c;磁頭需要需要自寫時復制空間來來回回尋址&#xff0c;并且將數據的老版本寫到寫時復制空間。從快照中讀…

刷題之多數元素(leetcode)

多數元素 哈希表解法&#xff1a; class Solution { public:/*int majorityElement(vector<int>& nums) {//map記錄元素出現的次數&#xff0c;遍歷map&#xff0c;求出出現次數最多的元素unordered_map<int,int>map;for(int i0;i<nums.size();i){map[nu…

最適合mysql5.6安裝的linux版本-實戰

文章目錄 一, 適合安裝mysql5.6的linu版本1. CentOS 72. Ubuntu 14.04 LTS (Trusty Tahr)3. Debian 8 (Jessie)4. Red Hat Enterprise Linux (RHEL) 7 二, 具體以Ubuntu 14.04 LTS (Trusty Tahr)為例安裝虛擬機安裝Ubuntu 14.04 LTS (Trusty Tahr) 自己弄安裝ssh(便于遠程訪問,…

前端八股文 對$nextTick的理解

$nexttick是什么? 獲取更新后的dom內容 為什么會有$nexttick ? vue的異步更新策略 (這也是vue的優化之一 要不然一修改數據就更新dom 會造成大量的dom更新 浪費性能) 這是因為 message &#xff08;data&#xff09;數據在發現變化的時候&#xff0c;vue 并不會立刻去更…

240705_昇思學習打卡-Day17-基于 MindSpore 實現 BERT 對話情緒識別

240705_昇思學習打卡-Day17-基于 MindSpore 實現 BERT對話情緒識別 近期確實太忙&#xff0c;此處僅作簡單記錄&#xff1a; 模型簡介 BERT全稱是來自變換器的雙向編碼器表征量&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;&#xff0c…

【wordpress教程】wordpress博客網站添加非法關鍵詞攔截

有的網站經常被惡意搜索&#xff0c;站長們不勝其煩。那我們如何屏蔽惡意搜索關鍵詞呢&#xff1f;下面就隨小編一起來解決這個問題吧。 后臺設置預覽圖&#xff1a; 設置教程&#xff1a; 1、把以下代碼添加至當前主題的 functions.php 文件中&#xff1a; add_action(admi…

【PyTorch】torch.fmod使用截斷正態分布truncated normal distribution初始化神經網絡的權重

這個代碼片段展示了如何用 PyTorch 初始化神經網絡的權重&#xff0c;具體使用的是截斷正態分布&#xff08;truncated normal distribution&#xff09;。截斷正態分布意味著生成的值會在一定范圍內截斷&#xff0c;以防止出現極端值。這里使用 torch.fmod 作為一種變通方法實…

配置linux net.ipv4.ip_forward數據包轉發

前言 出于系統安全考慮&#xff0c;在默認情況下&#xff0c;Linux系統是禁止數據包轉發的。數據包轉發指的是當主機擁有多個網卡時&#xff0c;通過一個網卡接收到的數據包&#xff0c;根據目的IP地址來轉發數據包到其他網卡。這個功能通常用于路由器。 如果在Linux系統中需要…

CVPR 2024最佳論文分享:通過解釋方法比較Transformers和CNNs的決策機制

CVPR&#xff08;Conference on Computer Vision and Pattern Recognition&#xff09;是計算機視覺領域最有影響力的會議之一&#xff0c;主要方向包括圖像和視頻處理、目標檢測與識別、三維視覺等。近期&#xff0c;CVPR 2024 公布了最佳論文。共有10篇論文獲獎&#xff0c;其…

計算組的妙用!!頁面權限控制

需求描述&#xff1a; 某些特殊的場景下&#xff0c;針對某頁看板&#xff0c;需要進行數據權限卡控&#xff0c;但是又不能對全部的數據進行RLS處理&#xff0c;這種情況下可以利用計算組來解決這個需求。 實際場景 事實表包含產品維度和銷售維度 兩個維度屬于同一公司下面的…

限幅濾波法

限幅濾波法 限幅濾波法:根據經驗判斷,確定兩次采樣允許的最大偏差值(設為A),每次檢測到新值時判斷:如果本次值與上次值之差<=A,則本次值有效,如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值。 優點: 能有效克服因偶然因素引起的脈沖…

【Python】已解決:FileNotFoundError: [Errno 2] No such file or directory: ‘./1.xml’

文章目錄 一、分析問題背景二、可能出錯的原因三、錯誤代碼示例四、正確代碼示例五、注意事項 已解決&#xff1a;FileNotFoundError: [Errno 2] No such file or directory: ‘./1.xml’ 一、分析問題背景 在Python編程中&#xff0c;FileNotFoundError是一個常見的異常&…

ChatGPT對話:Python程序自動模擬操作網頁,無法彈出下拉列表框

【編者按】需要編寫Python程序自動模擬操作網頁。編者有編程經驗&#xff0c;但沒有前端編程經驗&#xff0c;完全不知道如何編寫這種程序。通過與ChatGPT討論&#xff0c;1天完成了任務。因為沒有這類程序的編程經驗&#xff0c;需要邊學習&#xff0c;邊編程&#xff0c;遇到…

貝爾曼方程(Bellman Equation)

貝爾曼方程(Bellman Equation) 貝爾曼方程(Bellman Equation)是動態規劃和強化學習中的核心概念,用于描述最優決策問題中的價值函數的遞歸關系。它為狀態值函數和動作值函數提供了一個重要的遞推公式,幫助我們計算每個狀態或狀態-動作對的預期回報。 貝爾曼方程的原理 …

Python 自動化測試必會技能板塊—unittest框架

說到 Python 的單元測試框架&#xff0c;想必接觸過 Python 的朋友腦袋里第一個想到的就是 unittest。 的確&#xff0c;作為 Python 的標準庫&#xff0c;它很優秀&#xff0c;并被廣泛應用于各個項目。但其實在 Python 眾多項目中&#xff0c;主流的單元測試框架遠不止這一個…

西門子PLC1200--與電腦S7通訊

硬件構成 PLC為西門子1211DCDCDC 電腦上位機用PYTHON編寫 二者通訊用網線&#xff0c;通訊協議用S7 PLC上的數據 PLC上的數據是2個uint&#xff0c;在DB1&#xff0c;地址偏移分別是0和2 需要注意的是DB塊要關閉優化的塊訪問&#xff0c;否則是沒有偏移地址的 PLC中的數據內…

elementui中日期/時間的禁用處理,使用傳值的方式

項目中,經常會用到 在一個學年或者一個學期或者某一個時間段需要做的某件事情,則我們需要在創建這個事件的時候,需要設置一定的時間周期,那這個時間周期就需要給一定的限制處理,避免用戶的誤操作,優化用戶體驗 如下:需求為,在選擇學年后,學期的設置需要在學年中,且結束時間大…