C++牛客周賽題目分享(2)小紅叕戰小紫,小紅的數組移動,小紅的素數合并,小紅的子序列求和

目錄

?編輯

1.前言

2.四道題目

1.小紅叕戰小紫

1.題目描述

2.輸入描述

3.輸出描述

4.示例

5.題解與思路

2.小紅的數組移動

1.題目描述

2.輸入描述

3.輸出描述

4.示例

5.題解與思路

3.小紅的素數合并

1.題目描述

2.輸入描述

3.輸出描述

4.示例

5.題解與思路

4.小紅的子序列求和

1.題目描述

2.輸入描述

3.輸出描述

4.示例

5.題解與思路

3.小結


1.前言

哈嘍大家好喔,今天來給大家帶來牛客周賽42部分題目的題解,無論你是小白,還是大牛,你一定都是能看懂的,希望對大家有所幫助,也歡迎大家多多交流,提出不一樣但同樣很有價值的看法。

2.四道題目

1.小紅叕戰小紫

1.題目描述

2.輸入描述

3.輸出描述

4.示例

5.題解與思路

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;int main(){char a[15];scanf("%s",a);int i=strlen(a);if(i!=1)printf("kou");else printf("yukari");return 0;
} 

這道題就好像一道腦筋急轉彎一樣,需要簡單思考一下,代碼量不大,作為簽到題也是蠻有趣的。思路:由于每一次小紅都可以刪除多個前綴或后綴字符,所以當字符串大于1時,小紅只需要將字符串刪到1即可,此時小紅就贏。但如果本身字符串長度就為1,則小紫贏。

2.小紅的數組移動

1.題目描述

2.輸入描述

3.輸出描述

4.示例

5.題解與思路

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
long long num[100005];
long long ans = 0, n = 0, locate = 0;
char order[100005];int main() {scanf("%lld",&n);for (int i = 0; i < n; i++) {scanf("%lld",&num[i]);}scanf("%s",order);for(int i=0;i<strlen(order);i++){if(order[i]=='L')locate=max(0ll,locate-1);else locate=min(n-1,locate+1);ans+=num[locate];}ans%=1000000007;printf("%lld", ans);return 0;
}

這道題就是需要簡單模擬一下就OK了:num數組用于記錄每一位分數,order數組用于記錄指令,locate用于記錄移動時候的所在坐標,關于如何處理到數組邊界0和n-1時,用函數max以及min即可(需要注意一個小細節,使用這倆個數學函數的時候,需要保證比較的倆個數類型相同,不能一個為int,另一個為long long,所以在max中寫0ll用于將默認的int強轉long long)

3.小紅的素數合并

1.題目描述

2.輸入描述

3.輸出描述

4.示例

5.題解與思路

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;long long num[100005];
long long ans = 0, n = 0 ,mi = 1e18 ,ma = 0;
char order[100005];int main() {scanf("%lld",&n);for (int i = 0; i < n; i++) {scanf("%lld",&num[i]);}sort(num,num+n);int l=0 ,r=n-n%2-1;while(l<r){mi=min(mi,num[l]*num[r]);ma=max(ma,num[l]*num[r]);l++,r--;}if(n&1){mi=min(mi,num[n-1]);ma=max(ma,num[n-1]);}printf("%lld",ma-mi);return 0;
}

?先理解題意:素數先進行合并,最后尋找極差的最小值,在正式模擬之前我們需要明確一個問題,任意倆個素數想成合并后,一定是一個合數,合數不被作為接下來的合并對象

明確這個問題后我們開始正是分析,何時相減為最小,即我們需要保證合成操作結束后合數的最大沒有那么大,最小沒有那么小,所以這道題我們的思路是先將數組的質數進行sort快排(從小到大),每一合并操作都將數組中第一項和最后一項進行合并,最后尋找極差。

另外還有一個需要注意的問題是,數組中質數的個數可能為奇也可能為偶,偶數個數的時候正常處理,奇數個數的時候我們需要在合成前舍棄一個數,又由題意可得尋找極差的最小,那我們直接舍棄數組中的最大值即可,代碼中是另外單開了一個if來處理奇數單獨與舍棄的數進行大小比較。

4.小紅的子序列求和

1.題目描述

2.輸入描述

3.輸出描述

4.示例

5.題解與思路

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;int n=0 ,k=0,ans=0;
int mod=1e9+7;
long long c[1010][1010];//預處理的楊輝三角
long long pow10[1010];//記錄不同位數的倍數
char num[1010];//記錄僅有數字組成的字符串int main(){//根據題意輸入scanf("%d%d",&n,&k);scanf("%s",num);//處理楊輝三角for(int i= 0;i<1000;i++){for(int j=0;j<=i;j++){if(j==0||i==j)c[i][j]=1;else c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;}}//處理倍數pow10[0]=1;for(int i=1;i<1000;i++)pow10[i]=pow10[i-1]*10%mod;//關鍵模擬for(int i=0;i<n;i++){for(int j=0;j<k;j++){ans+=(num[i]-'0')*pow10[k-j-1]%mod*c[i][j]%mod*c[n-1-i][k-j-1]%mod;ans%=mod;}}printf("%d",ans);return 0;
} 

這道題我本人認為還是很有價值的(這道題可以用dp來做,但這里本人沒有使用這個方法),接下來將呈現我完整的思路歷程:

首先我們先對示例中的數據進行模擬

  • 我們模擬的思路是以每一個數為基準,算出每一個數字在每一個不同的數中的“價值”,向前向后延展。
  • 第一個數為5,5的前面沒有任何數,所以5只能做首位(這里說的都不是廢話,都是對分析有幫助的),因為k=3,所以我們需要在后面的022中任選倆個數,即C(3,2),又因為5在百位,所以5的價值為5*100*C(3,2)=1500。
  • 第二個數為0。當取5時,后面就從22中任取其一,即C(2,1);當不取5時,就將后面的22全取,即C(2,2)。所以0的價值為0*100*C(2,2)+0*10*C(2,1)=0。
  • 第三個數為2。推理過程同理,第一個2的價值為2*1*C(2,2)+2*10*C(2,1)=42。
  • 第四個數為2。推理過程同理,第二個2的價值為2*1*C(3,2)=6。
  • 綜上,1500+0+42+6=1548,符合題意。

從特殊到一般,分析數據

  • 我們發現每個數之前都有聯系,如C(3,2)=C(2,2)+C(2,1),這不禁可以讓你想到什么,這可就是大名鼎鼎楊輝三角啊,尋找每一位數字往前與往后所有的價值里面相乘的C(? ?,? ?)都和楊輝三角簡直如出一轍。
  • 再處理好每位數字出現次數的問題,接下來要來解決所在位數的問題。這里我們創建了一個pow10數組用于記錄每個位數所包含的倍數。
  • 處理完成后,我們接下來要通過代碼實現了。

代碼實現,有許多小細節以及需要分析的點

  • 首先按照題目要求進行輸入。
  • 接著提前處理楊輝三角并存儲進二維數組中。
  • 接下來處理倍數,這些都是很基礎的操作。
  • 最后正式模擬:注意在計算過程中要不斷的%1e9+7,防止溢出。先將著一位數字單獨拿出來(num[i]-'0'),乘以對應的倍數(如題目中的5作首位時,其為百位,即k-1-j=2,)乘以左側出現的次數c[i][j],再乘以右側出現的次數c[n-1-i][k-j-1](這里都可以拿5來舉例子,這里不再贅述),記得不斷取模就好。
  • 最后輸出結果。

3.小結

今天的分享到這里就結束了,廢了好大功夫才將這兒四道題講的清晰明白,希望大家多多支持我哦~

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

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

相關文章

增強For循環執行順序探究

增強For循環執行順序探究 增強For循環基礎執行順序探討對于數組對于集合 經典示例數組示例集合示例&#xff08;ArrayList&#xff09; 注意事項結論 在Java編程中&#xff0c;增強型for循環&#xff08;也稱為“foreach”循環&#xff09;是一種簡潔而強大的迭代集合或數組元素…

super

super 一、理解 super.屬性&#xff1a;在子類中&#xff0c;調用父類非私有化的成員屬性 super.方法&#xff1a;在子類中&#xff0c;調用父類非私有化的成員方法 super()&#xff1a;在子類構造方法中調用父類非私有的構造方法 二、案例 需求&#xff1a;編寫中國人和日本人…

云原生新手和開源教育分論壇 01-Kubernetes 社區:從新手到影響者

2024年04月20日 上海KCD & Shanghai&#xff1a;https://community.cncf.io/events/details/cncf-kcd-shanghai-presents-kcd-shanghai-2024/視頻觀看&#xff1a;https://www.bilibili.com/video/BV1nD421T786/?spm_id_from333.999.0.0&vd_sourceae7b192be069682aabc…

【FreeRTOS 快速入門】-- 1、STM32工程移植FreeRTOS

目錄 一、新建STM32工程 為了示范完整的移植過程&#xff0c;我們從0開始&#xff0c;新建一個標準的STM32點燈工程。 &#xff08;本篇以CubeMX作示范&#xff0c;CubeIDE操作近同&#xff0c;可作對比參考&#xff09; 1、新建工程 選擇 芯片型號 新建工程 2、搜索芯片型號…

24年做抖音小店,你還停留在數據?別人都已經開始注重利潤了

大家好&#xff0c;我是電商笨笨熊 一件事情持續做&#xff0c;一個項目持續深耕&#xff0c;意義到底是什么&#xff1f; 這句話我常常說&#xff0c;但很多人似乎走偏了實際意義&#xff1b; 尤其對于新手來說&#xff0c;做抖音小店總是向往某某老玩家多么牛的數據&#…

程序員健康指南:運動,讓代碼更流暢

程序員健康指南&#xff1a;運動&#xff0c;讓代碼更流暢 程序員&#xff0c;一個與電腦相伴的群體&#xff0c;長時間的久坐和高強度的腦力勞動是他們的日常。然而&#xff0c;久坐不僅影響體態&#xff0c;更對心臟健康構成威脅。根據《歐洲心臟雜志》的研究&#xff0c;中…

第十三節 huggingface的trainner解讀與Demo

文章目錄 前言一、trainer和TrainingArguments訓練與預測完整Demo1、數據構建2、TrainingArguments構建3、Trainer初始化4、模型訓練5、模型推理6、完整demo代碼7、完整運行結果二、輔助函數1、yield返回內容2、迭代器中斷恢復迭代demo3、yield from結構4、torch.Generator()的…

【PPT技巧】ppt文件打開就是只讀模式,如何改為可編輯模式?

PPT文檔打開是只讀模式&#xff0c;如何改成可編輯文檔呢&#xff1f;這需要分幾種情況來說&#xff0c;所以今天將介紹幾種方法幫助PPT只讀文檔改為可編輯文檔。 方法一&#xff1a; 我們可以先查看一下文件屬性&#xff0c;屬性中有只讀屬性&#xff0c;當我們打開文檔之后帶…

C++入門——引用(2)

前言 上一節我們開始學習了C&#xff0c;并且對C有了初步的了解&#xff0c;這一節我們繼續學習C的基礎&#xff0c;那么廢話不多說&#xff0c;我們正式進入今天的學習 C中的引用 1.1引用的概念 引用不是新定義一個變量&#xff0c;而是給已存在變量取了一個別名&#xff0…

uniapp小程序:大盒子包裹小盒子但是都有點擊事件該如何區分?

在開發過程中我們會遇到這種情況&#xff0c;一個大盒子中包裹這一個小盒子&#xff0c;兩個盒子都有點擊事件&#xff0c;例如&#xff1a; 這個時候如果點擊評價有可能會點擊到它所在的大盒子&#xff0c;如果使用css中的z-index設置層級的話如果頁面的盒子多的話會混亂&…

Spring解決泛型擦除的思路不錯,現在它是我的了。

你好呀&#xff0c;我是浮生。 Spring 的事件監聽機制&#xff0c;不知道你有沒有用過&#xff0c;實際開發過程中用來進行代碼解耦簡直不要太爽。 但是我最近碰到了一個涉及到泛型的場景&#xff0c;常規套路下&#xff0c;在這個場景中使用該機制看起來會很傻&#xff0c;但…

15、FreeRTOS 軟件定時器

文章目錄 一、什么是定時器?1.1 定時器的理解1.2 軟件定時器的特性 二、 軟件定時器的上下文2.1 守護任務2.2 守護任務的調度2.3 回調函數 三、軟件定時器的函數3.1 創建3.2 刪除3.3 啟動/停止3.5 修改周期3.6 定時器ID 四、案例4.1 一般使用4.2 消除抖動 一、什么是定時器? …

怎么解決ModuleNotFoundError: No module named ‘httpx_sse‘

解決方案 pip install httpx_sseLooking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting httpx_sse Downloading https://pypi.tuna.tsinghua.edu.cn/packages/e1/9b/a181f281f65d776426002f330c31849b86b31fc9d848db62e16f03ff739f/httpx_sse-0.4.0-py3-n…

Android 14.0 frameworks添加自定義服務

1.概述 在14.0的系統rom定制化產品開發中,對于提供系統接口來給app調用,來控制系統的某些功能,所以需要添加自定義服務也是常有功能,因此需要來在frameworks層中添加自定義系統服務的功能 2.frameworks添加自定義服務的核心類 frameworks\base\services\java\com\android…

Midjourney Imagine API 申請及使用

Midjourney Imagine API 申請及使用 申請流程 要使用 Midjourney Imagine API&#xff0c;首先可以到 Midjourney Imagine API 頁面點擊「Acquire」按鈕&#xff0c;獲取請求所需要的憑證&#xff1a; 如果你尚未登錄或注冊&#xff0c;會自動跳轉到登錄頁面邀請您來注冊和登…

多線程【LeetCode】

多線程【LeetCode】 前言前言推薦多線程信號量1114.按序打印1115.交替打印FooBar1116.打印零與奇偶數1117.H2O生成1188.設計有限阻塞隊列Plus1195.交替打印字符串1226.哲學家進餐 最后 前言 這是陳舊已久的草稿2022-11-27 20:44:17 這個是刷算法&#xff0c;也是準備寒假實習…

語音轉文字服務的調用接口

語音轉文字&#xff08;Speech-to-Text&#xff0c;STT&#xff09;技術允許將口語化的語音轉換成書面文字。以下是一些提供語音轉文字服務的調用接口及其特點。北京木奇移動技術有限公司&#xff0c;專業的軟件外包開發公司&#xff0c;歡迎交流合作。 1.訊飛開放平臺語音轉寫…

[貓頭虎分享21天微信小程序基礎入門教程]第1天:微信小程序概述與開發環境搭建教程

第1天&#xff1a;微信小程序概述與開發環境搭建 &#x1f63a; 文章目錄 第1天&#xff1a;微信小程序概述與開發環境搭建 &#x1f63a;自我介紹微信小程序概述特點 開發環境搭建步驟1: 注冊微信小程序賬號步驟2: 安裝開發者工具步驟3: 熟悉開發者工具界面 今日學習總結小測試…

UnityDOTS備忘

Unity DOTS中創建一個AssetBundle并將其用作Entity 創建一個新的Unity項目&#xff0c;并確保已啟用DOTS功能。 創建一個AssetBundle&#xff0c;可以通過在Project視圖中右鍵單擊文件夾并選擇“Create > AssetBundle”來創建。 將您想要轉換為Entity的資源&#xff08;例…

炒股開戶傭金最低萬1和萬0.854,融資融券現在利率最低4.0%~5%

??炒股開戶傭金一般是萬1和萬0.854&#xff0c;萬0.854有一定的資金量要求&#xff0c;高于萬1的是可以申請降低的。 開戶萬1傭金和萬0.854傭金只需要聯系證券公司客戶經理協商就行。 開戶流程&#xff1a; 1、向客戶經理索要開戶鏈接或者掃描二維碼、進入申請頁面&#x…