日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯省内模拟赛解题过程

發布時間:2023/12/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯省内模拟赛解题过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天參加了一場藍橋杯模擬賽,做的咋樣還不知道,本博客的題解只是我提交的代碼,并不代表真正的題解,大家參考著看看吧。
題目一
問題描述
  將LANQIAO中的字母重新排列,可以得到不同的單詞,如LANQIAO、AAILNOQ等,注意這7個字母都要被用上,單詞不一定有具體的英文意義。
  請問,總共能排列如多少個不同的單詞。
答案提交
  這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
思路:這個題目考察的是全排列。可以自己寫深搜,也可以調用庫函數。注意這個題目,有可能是重復的字符串,因此注意去重。
代碼如下:

#include<bits/stdc++.h> #define ll long long using namespace std;const int maxx=10; char s[maxx];int main() {cin>>s;sort(s,s+7);int ans=0;map<string,bool> mp;do{string uu="";for(int i=0;i<7;i++) uu+=s[i];if(mp[uu]==0) mp[uu]=1,ans++;}while(next_permutation(s,s+7));cout<<ans<<endl;return 0;}


題目二
問題描述
  由1對括號,可以組成一種合法括號序列:()。
  由2對括號,可以組成兩種合法括號序列:()()、(())。
  由4對括號組成的合法括號序列一共有多少種?
答案提交
  這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
思路:這個題目考察的是dfs以及序號匹配問題。
代碼如下:

#include<bits/stdc++.h> #define ll long long using namespace std;map<string,int> mp; inline bool check(string s) {stack<int> st;for(int i=0;i<s.length();i++){if(s[i]=='(') st.push(i);else{if(st.size()==0) return 0;st.pop();}}if(st.size()) return 0;return 1;} inline void dfs(string s,int &ans) {if(s.length()==8){if(!mp[s]&&check(s)) mp[s]=1,ans++;return ;}dfs(s+'(',ans);dfs(s+')',ans); } int main() {int ans=0;dfs("",ans);cout<<ans<<endl;return 0;}


題目三
問題描述
  一個包含有2019個結點的無向連通圖,最少包含多少條邊?
答案提交
  這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
思路:包含有2019個結點的無向連通圖,邊數最少的就是2019個結點形成一個樹的時候,邊數為2018.
題目四
問題描述
  在計算機存儲中,12.5MB是多少字節?
答案提交
  這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
思路:1MB=1024KB=10241024B,12.5MB=12.51024*1024=13107200
題目五
問題描述
  給定一個單詞,請使用凱撒密碼將這個單詞加密。
  凱撒密碼是一種替換加密的技術,單詞中的所有字母都在字母表上向后偏移3位后被替換成密文。即a變為d,b變為e,…,w變為z,x變為a,y變為b,z變為c。
  例如,lanqiao會變成odqtldr。
輸入格式
  輸入一行,包含一個單詞,單詞中只包含小寫英文字母。
輸出格式
  輸出一行,表示加密后的密文。
樣例輸入
lanqiao
樣例輸出
odqtldr
評測用例規模與約定
  對于所有評測用例,單詞中的字母個數不超過100。
思路:水題,字符之間的轉換。
代碼如下:

#include<bits/stdc++.h> #define ll long long using namespace std;const int maxx=30; int vis[maxx]; string s;inline void init() {for(int i=0;i<26;i++) vis[i]=(i+3)%26; }int main() {cin>>s;init();for(int i=0;i<s.length();i++) cout<<(char)(vis[s[i]-'a']+'a');cout<<endl;return 0; }

題目六
問題描述
  給定三個整數 a, b, c,如果一個整數既不是 a 的整數倍也不是 b 的整數倍還不是 c 的整數倍,則這個數稱為反倍數。
  請問在 1 至 n 中有多少個反倍數。
輸入格式
  輸入的第一行包含一個整數 n。
  第二行包含三個整數 a, b, c,相鄰兩個數之間用一個空格分隔。
輸出格式
  輸出一行包含一個整數,表示答案。
樣例輸入
30
2 3 6
樣例輸出
10
樣例說明
  以下這些數滿足要求:1, 5, 7, 11, 13, 17, 19, 23, 25, 29。
評測用例規模與約定
  對于 40% 的評測用例,1 <= n <= 10000。
  對于 80% 的評測用例,1 <= n <= 100000。
  對于所有評測用例,1 <= n <= 1000000,1 <= a <= n,1 <= b <= n,1 <= c <= n。
思路:水題,按照素數篩的方法,把a,b,c的倍數都標記一下,然后統計輸出就好了。
代碼如下:

#include<bits/stdc++.h> #define ll long long using namespace std;const int maxx=1e6+100; int vis[maxx]; int n,a,b,c;int main() {cin>>n;cin>>a>>b>>c;memset(vis,0,sizeof(vis));for(int i=a;i<=n;i+=a) vis[i]=1;for(int i=b;i<=n;i+=b) vis[i]=1;for(int i=c;i<=n;i+=c) vis[i]=1;int ans=0;for(int i=1;i<=n;i++) if(vis[i]^1) ans++;cout<<ans<<endl;return 0; }

題目七
問題描述
  如果一個序列的奇數項都比前一項大,偶數項都比前一項小,則稱為一個擺動序列。即 a[2i]<a[2i-1], a[2i+1]>a[2i]。
  小明想知道,長度為 m,每個數都是 1 到 n 之間的正整數的擺動序列一共有多少個。
輸入格式
  輸入一行包含兩個整數 m,n。
輸出格式
  輸出一個整數,表示答案。答案可能很大,請輸出答案除以10000的余數。
樣例輸入
3 4
樣例輸出
14
樣例說明
  以下是符合要求的擺動序列:
  2 1 2
  2 1 3
  2 1 4
  3 1 2
  3 1 3
  3 1 4
  3 2 3
  3 2 4
  4 1 2
  4 1 3
  4 1 4
  4 2 3
  4 2 4
  4 3 4
評測用例規模與約定
  對于 20% 的評測用例,1 <= n, m <= 5;
  對于 50% 的評測用例,1 <= n, m <= 10;
  對于 80% 的評測用例,1 <= n, m <= 100;
  對于所有評測用例,1 <= n, m <= 1000。
思路:暴力的話肯定不行,這個題目也沒法用啥奇技淫巧。我的做法是dp,本來dp就不咋地,想了好久不知道對不對。題目是分成奇偶的,那么我們考慮的時候也需要考慮奇偶性。
假如列數是奇數的話:dp[i][j]代表的是長度為i,結尾的數字大于等于j的個數。
假如列數是偶數的話:dp[i][j]代表的是長度為i,結尾的數字小于等于j的個數。
狀態轉移方程為:
如果列數是奇數的話:dp[i][j]=dp[i-1][j-1]+dp[i][j+1].
如果列數是偶數的話:dp[i][j]=dp[i-1][j+1]+dp[i][j-1].
如果長度是偶數,我們就輸出dp[m][n];如果長度是奇數,我們就輸出dp[m][1]。
這個題目,奇偶性不同,dp數組所代表的的含義不同,是比較難想的。
代碼如下:

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define ll long long #define mod 10000 using namespace std;const int maxx=1e3+100; int dp[maxx][maxx]; int m,n;int main() {memset(dp,0,sizeof(dp));scanf("%d%d",&m,&n);for(int i=1;i<=n;i++) dp[1][i]=n-i+1;//預處理for(int i=2;i<=m;i++){if(i&1) for(int j=n;j>=1;j--) dp[i][j]=(dp[i-1][j-1]+dp[i][j+1])%mod;else for(int j=1;j<=n;j++) dp[i][j]=(dp[i-1][j+1]+dp[i][j-1])%mod;}if(m&1) printf("%d\n",dp[m][1]);else printf("%d\n",dp[m][n]);return 0; }

題目八
問題描述
  對于一個 n 行 m 列的表格,我們可以使用螺旋的方式給表格依次填上正整數,我們稱填好的表格為一個螺旋矩陣。
  例如,一個 4 行 5 列的螺旋矩陣如下:
  1 2 3 4 5
  14 15 16 17 6
  13 20 19 18 7
  12 11 10 9 8
輸入格式
  輸入的第一行包含兩個整數 n, m,分別表示螺旋矩陣的行數和列數。
  第二行包含兩個整數 r, c,表示要求的行號和列號。
輸出格式
  輸出一個整數,表示螺旋矩陣中第 r 行第 c 列的元素的值。
樣例輸入
4 5
2 2
樣例輸出
15
評測用例規模與約定
  對于 30% 的評測用例,2 <= n, m <= 20。
  對于 70% 的評測用例,2 <= n, m <= 100。
  對于所有評測用例,2 <= n, m <= 1000,1 <= r <= n,1 <= c <= m。
思路:這個題目比較水,數據量不大,我們可以把螺旋數組求出來。求解過程不要用dfs,會爆棧。用for循環就可以。
代碼如下:

#include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<cstring> #include<string> #define ll long long using namespace std;const int maxx=1e3+100; int a[maxx][maxx]; int d[][2]={{0,1},{1,0},{0,-1},{-1,0}}; int n,m,r,c;int main() {scanf("%d%d",&n,&m);scanf("%d%d",&r,&c);memset(a,0,sizeof(a));int num=1;int sum=0;int x=1,y=1;int dir=0;while(sum<n*m){a[x][y]=num++;sum++;int tx=x+d[dir][0];int ty=y+d[dir][1];if(tx<1||tx>n||ty<1||ty>m||a[tx][ty]) dir=(dir+1)%4;tx=x+d[dir][0];ty=y+d[dir][1];x=tx;y=ty;}cout<<a[r][c]<<endl;return 0; }

題目九
問題描述
  小明和朋友們一起去郊外植樹,他們帶了一些在自己實驗室精心研究出的小樹苗。
  小明和朋友們一共有 n 個人,他們經過精心挑選,在一塊空地上每個人挑選了一個適合植樹的位置,總共 n 個。他們準備把自己帶的樹苗都植下去。
  然而,他們遇到了一個困難:有的樹苗比較大,而有的位置挨太近,導致兩棵樹植下去后會撞在一起。
  他們將樹看成一個圓,圓心在他們找的位置上。如果兩棵樹對應的圓相交,這兩棵樹就不適合同時植下(相切不受影響),稱為兩棵樹沖突。
  小明和朋友們決定先合計合計,只將其中的一部分樹植下去,保證沒有互相沖突的樹。他們同時希望這些樹所能覆蓋的面積和(圓面積和)最大。
輸入格式
  輸入的第一行包含一個整數 n ,表示人數,即準備植樹的位置數。
  接下來 n 行,每行三個整數 x, y, r,表示一棵樹在空地上的橫、縱坐標和半徑。
輸出格式
  輸出一行包含一個整數,表示在不沖突下可以植樹的面積和。由于每棵樹的面積都是圓周率的整數倍,請輸出答案除以圓周率后的值(應當是一個整數)。
樣例輸入
6
1 1 2
1 4 2
1 7 2
4 1 2
4 4 2
4 7 2
樣例輸出
12
評測用例規模與約定
  對于 30% 的評測用例,1 <= n <= 10;
  對于 60% 的評測用例,1 <= n <= 20;
  對于所有評測用例,1 <= n <= 30,0 <= x, y <= 1000,1 <= r <= 1000。
思路:這個題目沒啥思路,直接暴力的,不知道能過多少。
代碼如下:

#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #include<cmath> #define ll long long #define mod 10000 using namespace std;const int maxx=1e3+100; struct node{int x,y;int r; }p[maxx]; int n;inline int check(vector<int> pp) {int sum=0;for(int i=0;i<pp.size();i++){for(int j=i+1;j<pp.size();j++){int x=pp[i];int y=pp[j];if((p[x].x-p[y].x)*(p[x].x-p[y].x)+(p[x].y-p[y].y)*(p[x].y-p[y].y)<(p[x].r+p[y].r)*(p[x].r+p[y].r)) return -1;}sum+=p[pp[i]].r*p[pp[i]].r;}return sum; } inline void dfs(int id,vector<int> &pp,int &_max) {int zz=check(pp);if(zz==-1) return ;_max=max(_max,zz);if(id>n) return ;pp.push_back(id);dfs(id+1,pp,_max);pp.pop_back();dfs(id+1,pp,_max); } int main() {scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].r);vector<int> p;int _max=0;dfs(1,p,_max);printf("%d\n",_max);return 0; }

題目十
問題描述
  2015年,全中國實現了戶戶通電。作為一名電力建設者,小明正在幫助一帶一路上的國家通電。
  這一次,小明要幫助 n 個村莊通電,其中 1 號村莊正好可以建立一個發電站,所發的電足夠所有村莊使用。
  現在,這 n 個村莊之間都沒有電線相連,小明主要要做的是架設電線連接這些村莊,使得所有村莊都直接或間接的與發電站相通。
  小明測量了所有村莊的位置(坐標)和高度,如果要連接兩個村莊,小明需要花費兩個村莊之間的坐標距離加上高度差的平方,形式化描述為坐標為 (x_1, y_1) 高度為 h_1 的村莊與坐標為 (x_2, y_2) 高度為 h_2 的村莊之間連接的費用為
  sqrt((x_1-x_2)(x_1-x_2)+(y_1-y_2)(y_1-y_2))+(h_1-h_2)*(h_1-h_2)。
  在上式中 sqrt 表示取括號內的平方根。請注意括號的位置,高度的計算方式與橫縱坐標的計算方式不同。
  由于經費有限,請幫助小明計算他至少要花費多少費用才能使這 n 個村莊都通電。
輸入格式
  輸入的第一行包含一個整數 n ,表示村莊的數量。
  接下來 n 行,每個三個整數 x, y, h,分別表示一個村莊的橫、縱坐標和高度,其中第一個村莊可以建立發電站。
輸出格式
  輸出一行,包含一個實數,四舍五入保留 2 位小數,表示答案。
樣例輸入
4
1 1 3
9 9 7
8 8 6
4 5 4
樣例輸出
17.41
評測用例規模與約定
  對于 30% 的評測用例,1 <= n <= 10;
  對于 60% 的評測用例,1 <= n <= 100;
  對于所有評測用例,1 <= n <= 1000,0 <= x, y, h <= 10000。
思路:不知道這個題目水了還是我考慮的不周詳。我們可以把各個村莊之間的花費求出來,我們至少要建立n-1條電線。就轉化成求最小生成樹了。我用的Kruscal算法。
代碼如下:

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define ll long long using namespace std;const int maxx=1e3+100; struct node{int x,y;double dis;bool operator<(const node &a)const{return dis<a.dis;} }p[maxx*maxx]; int X[maxx],Y[maxx],H[maxx],f[maxx]; int n;inline double get_dis(int i,int j) {return sqrt((X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j]))+(H[i]-H[j])*(H[i]-H[j]); } inline int getf(int u) {return u==f[u]?u:f[u]=getf(f[u]); } inline int merge(int u,int v) {int t1=getf(u);int t2=getf(v);if(t1!=t2){f[t1]=t2;return 1;}return 0; } int main() {scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d%d",&X[i],&Y[i],&H[i]);int cnt=0;for(int i=1;i<=n;i++)for(int j=1;j<i;j++) p[++cnt].x=i,p[cnt].y=j,p[cnt].dis=get_dis(i,j);sort(p+1,p+1+cnt);for(int i=1;i<=n;i++) f[i]=i;double sum=0;for(int i=1;i<=cnt;i++){if(merge(p[i].x,p[i].y)) sum+=p[i].dis;}printf("%.2lf\n",sum);return 0; }

模擬賽跟正規賽還是沒法比的,這次題目,自我感覺除了擺動序列和種樹的那個,其余難度都不是很大(結果還沒出,也不好說)。大家參考著看一下吧。今年的藍橋還不知道能不能舉辦。。
努力加油a啊,(o)/~

總結

以上是生活随笔為你收集整理的蓝桥杯省内模拟赛解题过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。