藍橋杯備戰刷題two(自用)

1.楊輝三角形?

#include<iostream>
using namespace std;
#define ll long long
const int N=2e5+10;
int a[N];
//1 0 0 0 0 0 0
//1 1 0 0 0 0 0
//1 2 1 0 0 0 0
//1 3 3 1 0 0 0
//1 4 6 4 1 0 0
//1 5 10 10 5 1
//前綴和思想
//第一列全為1,第二列為從0開始遞增1的序列,
//可以發現當前列為前面一列的前綴和序列
//N最大是1e9,第三列計算n*(n+1)/2>1e9得到n>44721
//又第三列前面有兩個0,即最小需要44721+2=44723行
//當第三列的值已經大于1e9時,不需要再計算后面的數,
//直接根據第二列規律,找第二列中n的位置即可。
//由于第二列是從0開始的,此時可以確定n是在第n+1行,
//又因為是第二列,所以n的是數列中第n?(n+1)/2+2個。
int main()
{int n;cin>>n;a[0]=1;int k=1;if(n==1)cout<<1<<endl;else{for(int i=1;i<44725;i++)//枚舉行{for(int j=i;j>=1;j--)//從后往前(前綴和){a[j]+=a[j-1];if(a[j]==n){cout<<k+i-j+1<<endl;return 0;}}k+=(i+1);}cout<<(1+n)*n/2+2<<endl;}return 0;
}

2.迷宮

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
#define pii pair<int,int>
#define x first
#define y second
string ss[31]={
"                                                   ",
" 01010101001011001001010110010110100100001000101010",
" 00001000100000101010010000100000001001100110100101",
" 01111011010010001000001101001011100011000000010000",
" 01000000001010100011010000101000001010101011001011",
" 00011111000000101000010010100010100000101100000000",
" 11001000110101000010101100011010011010101011110111",
" 00011011010101001001001010000001000101001110000000",
" 10100000101000100110101010111110011000010000111010",
" 00111000001010100001100010000001000101001100001001",
" 11000110100001110010001001010101010101010001101000",
" 00010000100100000101001010101110100010101010000101",
" 11100100101001001000010000010101010100100100010100",
" 00000010000000101011001111010001100000101010100011",
" 10101010011100001000011000010110011110110100001000",
" 10101010100001101010100101000010100000111011101001",
" 10000000101100010000101100101101001011100000000100",
" 10101001000000010100100001000100000100011110101001",
" 00101001010101101001010100011010101101110000110101",
" 11001010000100001100000010100101000001000111000010",
" 00001000110000110101101000000100101001001000011101",
" 10100101000101000000001110110010110101101010100001",
" 00101000010000110101010000100010001001000100010101",
" 10100001000110010001000010101001010101011111010010",
" 00000100101000000110010100101001000001000000000010",
" 11010000001001110111001001000011101001011011101000",
" 00000110100010001000100000001000011101000000110011",
" 10101000101000100010001111100010101001010000001000",
" 10000010100101001010110000000100101010001011101000",
" 00111100001000010000000110111000000001000000001011",
" 10000001100111010111010001000110111010101101111000"};
struct Ch{char ch;pii per;
};
Ch mp[40][60];
bool vis[40][60];
int fx[] = {1,0,0,-1};
int fy[] = {0,-1,1,0};
void bfs(int x,int y)
{queue<pii> q;q.push({x,y});vis[x][y] = true;while(!q.empty()){pii temp = q.front();for(int i = 0;i < 4;i++){pii t ={temp.x + fx[i],temp.y + fy[i]};if(mp[t.x][t.y].ch == '0' && vis[t.x][t.y] == false){mp[t.x][t.y].per = temp;vis[t.x][t.y] = true;q.push(t);}}q.pop();}
}
int main()
{string s;for(int i = 1;i <= 30;i++){for(int j = 1;j <= 50;j++){mp[i][j].ch = ss[i][j];}}bfs(1,1);pii t = {30,50};while(t.x != 1 || t.y != 1){int x = t.x - mp[t.x][t.y].per.x;int y = t.y - mp[t.x][t.y].per.y;int flag;for(int i = 0;i < 4;i++){if(x == fx[i] && y == fy[i]){flag = i;break;}}switch(flag){case 0:s += 'D';break;case 1:s += 'L';break;case 2:s += 'R';break;case 3:s += 'U';break;}t = mp[t.x][t.y].per;}for(int i = s.size() - 1;i >= 0;i--){cout << s[i];}return 0;
}
//Ch記錄這個結點的值和前驅結點的坐標,以便記錄路徑
//字典序最小的方向數組 - DLRU - 最優性剪枝
//求最短路使用BFS
//從終點開始遍歷每個結點的前驅結點,直到起點結束,當兩個坐標都為1的時候,循環結束
//當前結點減去前驅結點得到的值對應的就是前驅節點移動的方向
//使用switch來進行方向判斷,加入答案,最后答案要進行逆序輸出

?3.潛伏者

#include <iostream>
#include <map>
using namespace std;
int check[26];
int notwell[26];
int main()
{string secret;string origin;string need;cin>>secret>>origin>>need;map<char,int>ohp;map<char,int>shp;bool ok=1;for(int i=0;i<origin.size();i++){check[origin[i]-'A']=1;if(!ohp[origin[i]])ohp[origin[i]]=secret[i],shp[secret[i]]=origin[i];else {if(ohp[origin[i]]!=secret[i])notwell[origin[i]-'A']=1;}}for(int i=0;i<26;i++){if(check[i]==0){ok=0;break;}}string ans;for(int i=0;i<need.size();i++){if(!shp[need[i]]||notwell[need[i]-'A']){ok=0;break;}else ans+=(char)shp[need[i]];}if(!ok)cout<<"Failed"<<endl;else cout<<ans<<endl;return 0;
}

?4.滅鼠先鋒

#include <iostream>
using namespace std;
//下第二行
//0000
//第一個人:XX00      X000
//第二個人:XXX0      XXX0
//第一個人:XXXX(輸)  XXXX
//無論第一個人下一個還是兩個,第二個人都會讓它輸
//即誰下滿第一行,誰就贏
//換言之,誰開始下第二行,誰就輸
int main()
{cout<<"LLLV"<<endl;return 0;
}

5.求和

#include <iostream>
using namespace std;
const int N=2e5+5;
#define ll long long
int n;
int a[N];
//a1 a2 a3 a4 a5 .. an
//a1*(a2+a3+...+an)+a2*(a3+a4+...+an)+a3*(a4+a5+...an)+an-1*an
//后綴和
ll suf[N];
int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];suf[i]=a[i];}for(int i=n-1;i>=1;i--){suf[i]+=suf[i+1];}ll ans=0;for(int i=1;i<=n-1;i++){ans+=(a[i]*suf[i+1]);}cout<<ans<<endl;return 0;
}

?6.爬樹的甲殼蟲

?

#include <iostream>
using namespace std;
#define ll long long
const int p=998244353; 
const int N=1e5+10;
ll E[N];
ll qmi(int a,int k,int p)//a^k%p
{ll res=1;while(k){if(k&1)res=(ll)res*a%p;k>>=1;a=(ll)a*a%p;}return res;
}
//E[n]=E[n-1]+(1-P[n])*1+P[n]*(E[n]+1);
//E[n]=(E[n-1]+1)/(1-P[n])
//對到每層高度的期望,使用對前面的進行累加,以保證可以到達第n層了
//以第n層為例,在第n-1層有(1-P[n])的概率成功再乘以時間1s則為成功期望時間
//在第n-1層有P[n]的概率失敗則P[n]*(E[n]+1)即失敗概率乘以從頭再爬到n和掉下去的1s則為失敗期望時間
int main()
{int n;cin>>n;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;E[i]=((E[i-1]+1)%p*(y%p))%p;E[i]*=qmi(y-x,p-2,p);	E[i]%=p;}cout<<E[n]<<endl;return 0;
}

?7.數的拆分

?

#include <iostream>
#include <cmath>
using namespace std;
#define ll long long
//如果能拆一定有以下的方式構造
//設p1和p2為素數或者其中一個為1
//n = p1^n1 * p2^n2
//n1和n2肯定可以被分解為=2+X或者=3+X
//即先判斷此數是不是平方數或者立方數
//如果都不是則接著找質因子,若出現質因子的指數只有1,則肯定不行
//a最大是1e18,質因子找到4000即可
bool flag;
bool cubic(ll n)
{ll x = pow(n, 1.0 / 3);while (x * x * x <= n)//一定要使用while{if (x * x * x == n)return true;++x;}return false;
}
bool square(ll n)
{ll x = sqrt(n);while (x * x <= n)//一定要使用while{if (x * x == n)return true;++x;}return false;
}
int prime[2000];
int idx;
void Prime()
{int st[4005] = { 0 };for (int i = 2; i <= 4000; ++i)if (!st[i])for (int j = 2 * i; j <= 4000; j += i)st[j] = 1;for (int i = 2; i <= 4000; ++i)if (!st[i])prime[idx++] = i;}
ll num[100050];
int t;
int main()
{Prime();scanf("%d", &t);for (int i = 0; i < t; ++i)scanf("%lld", num + i);for (int i = 0; i < t; ++i){ll x = num[i];if (cubic(x) ||square(x)){printf("yes\n");continue;}flag = true;for (int j = 0; j < idx; ++j){int s = 0;while (x % prime[j] == 0){x /= prime[j];++s;}if (s == 1){flag = false;break;}}if (flag && (cubic(x) || square(x)))printf("yes\n");elseprintf("no\n");}return 0;
}

?

8.推導部分和

?

#include <iostream>
using namespace std;
#define ll long long
int n,m,q;
//并查集
int p[200000+10];
ll d[200000+10];
//以一個根結點為參照,l-1到根結點的距離為d[l-1] r到根結點的距離為d[r]
//根據前綴和原理 [l, r] 區間和為 d[r] - d[l - 1]
int find(int x)
{if(x!=p[x]){int t=p[x];p[x]=find(p[x]);d[x]+=d[t];}return p[x];
}
int main()
{scanf("%d %d %d",&n,&m,&q);//初始化并查集for(int i=1;i<=n;i++)p[i]=i;for(int i=1;i<=m;i++){int l,r;ll s;scanf("%d %d %lld",&l,&r,&s);int pl=find(l-1),pr=find(r);p[pl]=pr;d[pl]=d[r]-d[l-1]-s;}for(int i=1;i<=q;i++){int l,r;scanf("%d %d",&l,&r);int pl=find(l-1),pr=find(r);if(pl==pr){printf("%lld\n",d[r]-d[l-1]);}else{printf("UNKNOWN\n");}}return 0;
}

?(參考代碼來自lanqiao1533688980)

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

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

相關文章

信息檢索(七):Transformer Memory as a Differentiable Search Index

Transformer Memory as a Differentiable Search Index 摘要1. 引言2. 相關工作3. 可微搜索索引3.1 索引策略3.1.1 索引方法3.1.2 文檔表示策略 3.2 用于檢索的 Docids 表示3.3 訓練和優化 4. 實驗4.1 基線4.2 實驗結果 5. 結論參考資料 原文鏈接&#xff1a;https://proceedin…

Revit-二開之創建線性尺寸標注-(5)

創建線性尺寸標注 對應的Revit界面的按鈕 線性尺寸標注源碼 本篇文章實現的邏輯是從rvt文章中拾取一面墻,然后對墻添加再水平方向上的線性尺寸標注 protected override Result OnExecute(ExternalCommandData commandData, ref string message, ElementSet elements

LeetCode 刷題 [C++] 第55題.跳躍游戲

題目描述 給你一個非負整數數組 nums &#xff0c;你最初位于數組的 第一個下標 。數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個下標&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 題目分析 題目中…

2.1 mov、add和sub加減指令實操體驗

匯編語言 1. mov操作 1.1 mov移動值 mov指令把右邊的值移動到左邊 mount c d:masm c: debug r ax 0034 r 073f:0100 mov ax,7t1.2 mov移動寄存器的值 把右邊寄存器的值賦值給左邊的寄存器 a 073f:0105 mov bx,axt1.3 mov高八位&#xff08;high&#xff09;和低八位&am…

設計模式——中介者模式(mediator pattern)

概述 如果在一個系統中對象之間的聯系呈現為網狀結構&#xff0c;如下圖所示。對象之間存在大量的多對多聯系&#xff0c;將導致系統非常復雜&#xff0c;這些對象既會影響別的對象&#xff0c;也會被別的對象所影響&#xff0c;這些對象稱為同事對象&#xff0c;它們之間通過彼…

json---->如何把對象以json的形式傳遞給后端?

把對象以json的形式傳遞有很多種&#xff0c;先寫一種&#xff0c;后期再補充 &#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&#x1f64c;&…

?用細節去解釋,如何打造一款行政旗艦車型

高山行政加長版應該是這個級別里最大的幾款 MPV 之一了&#xff0c;對于一款較大的車型&#xff0c;其最重要的是解決行駛的便利性。 這次我們就試試魏牌高山行政加長版&#xff0c;從產品本身出發看幾個緯度的細節&#xff1a; 行政該如何定義加長后產品的功能變化加長之后到…

Ladder類創建梯形對象共享一個下底

package Absent;public class Chapter5 {public static void main(String[] args) {Ladder.bottom100;Ladder ladderOnenew Ladder();Ladder ladderTwonew Ladder();ladderOne.top23;ladderTwo.top34;System.out.println("ladderOne的上底&#xff1a;"ladderOne.get…

代碼隨想錄算法訓練營(動態規劃9)|198.打家劫舍 213.打家劫舍II 337.打家劫舍III

今天就是打家劫舍的一天,微笑 198.打家劫舍 leetcode題目鏈接 視頻講解 文章講解 動規五部曲分析如下&#xff1a; 確定dp數組&#xff08;dp table&#xff09;以及下標的含義 dp[i]&#xff1a;考慮下標i&#xff08;包括i&#xff09;以內的房屋&#xff0c;最多可以偷竊…

Java 數組(詳細)

目錄 一、數組的概述 1. 數組的理解&#xff1a; 2. 數組相關的概念&#xff1a; 3. 數組的特點&#xff1a; 4. 數組的分類&#xff1a; 5.數據結構&#xff1a; 二、一維數組 1. 一維數組的聲明與初始化 2. 一維數組元素的引用&#xff1a; 3. 數組的屬性&#xff1…

Scikit-Learn邏輯回歸

Scikit-Learn邏輯回歸 1、邏輯回歸概述1.1、邏輯回歸1.2、邏輯回歸的優缺點1.3、邏輯回歸與線性回歸2、邏輯回歸的原理2.1、邏輯回歸的概念與原理2.2、邏輯回歸的損失函數2.3、梯度下降法求解邏輯回歸的最優解3、Scikit-Learn邏輯回歸3.1、決策邊界3.2、Scikit-Learn邏輯回歸AP…

【Java數據結構 -- 二叉樹+樹的深度優先遍歷】

二叉樹 1. 二叉樹1.1 二叉樹的介紹1.2 兩種特殊的二叉樹1.3 二叉樹的性質1.4 二叉樹的存儲 2. 二叉樹的基本操作2.1 二叉樹的創建2.2 二叉樹的優先遍歷2.3 遞歸實現二叉樹遍歷2.4 用非遞歸實現二叉樹遍歷 1. 二叉樹 1.1 二叉樹的介紹 二叉樹是一種數據結構&#xff0c;一顆二…

【python、nlp、transformer】transformer學習部分

注&#xff1a; 此博文僅為了解transformer架構&#xff0c;如果使用&#xff0c;建議直接調用庫就行了 Transformer的優勢 相比之前占領市場的LSTM和GRU模型&#xff0c;Transformer有兩個顯著的優勢&#xff1a; 1. Transformer能夠利用分布式GPU進行并行訓練&#xff0c…

小朋友來自多少小區 - 華為OD統一考試(C卷)

OD統一考試&#xff08;C卷&#xff09; 分值&#xff1a; 100分 題解&#xff1a; Java / Python / C 題目描述 幼兒園組織活動&#xff0c;老師布置了一個任務&#xff1a; 每個小朋友去了解與自己同一個小區的小朋友還有幾個。 我們將這些數量匯總到數組 garden 中。 請…

數據庫-第四/五章 數據庫安全性和完整性【期末復習|考研復習】

前言 總結整理不易&#xff0c;希望大家點贊收藏。 給大家整理了一下計數據庫系統概論中的重點概念&#xff0c;以供大家期末復習和考研復習的時候使用。 參考資料是王珊老師和薩師煊老師的數據庫系統概論(第五版)。 文章目錄 前言4 第四章 數據庫安全性4.1 數據庫安全性定義4.…

學生宿舍管理小程序|基于微信小程序的學生宿舍管理系統設計與實現(源碼+數據庫+文檔)

學生宿舍管理小程序目錄 目錄 基于微信小程序的學生宿舍管理系統設計與實現 一、前言 二、系統功能設計 三、系統實現 1、管理員模塊的實現 &#xff08;1&#xff09;學生信息管理 &#xff08;2&#xff09;公告信息管理 &#xff08;3&#xff09;宿舍信息管理 &am…

git clone http/https 報錯 10054/443 問題

文章目錄 錯誤解決方案1 關閉http和https代理2 設置自己的代理 錯誤 錯誤 Failed to connect to github.com port 443: Timed out OpenSSL SSL_read: Connection was reset, errno 10054 一般都是網絡問題 解決方案 1 關閉http和https代理 git config --global --unset htt…

《系統架構設計師教程(第2版)》第5章-軟件工程基礎知識-05-凈室軟件工程(CSE)

文章目錄 1. 概述2. 理論基礎2.1 函數理論2.2 抽樣理論 3. 技術手段3.1 增量式開發3.2 基于函數的規范與設計3.3 正確性驗證3.4 統計測試 (Statistically Based Testing) 和軟件認證 4. 應用與缺點1&#xff09;太理論化2&#xff09;缺少傳統模塊測試3&#xff09;帶有傳統軟件…

UE學習筆記--解決滾輪無法放大藍圖、Panel等

我們發現有時候創建藍圖之后&#xff0c;右上角的縮放是1&#xff1a;1 但是有時候我們可能需要放的更大一點。 發現一直用鼠標滾輪像上滾動&#xff0c;都沒有效果。 好像最大只能 1&#xff1a;1. 那是因為 UE 做了限制。如果希望繼續放大&#xff0c;我們可以按住 Ctrl 再去…

StarRocks實戰——攜程酒店實時數倉

目錄 一、實時數倉 二、實時數倉架構介紹 2.1 Lambda架構 2.2 Kappa架構 三、攜程酒店實時數倉架構 3.1 架構選型 3.2 實時計算引擎選型 3.3 OLAP選型 四、攜程酒店實時訂單 4.1 數據源 4.2 ETL數據處理 4.3 應用效果 4.4 總結 原文大佬的這篇實時數倉建設案例有借…