Maskros的蓝桥刷题之路(1-13)
生活随笔
收集整理的這篇文章主要介紹了
Maskros的蓝桥刷题之路(1-13)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 藍(lán)橋-歷屆試題
- PREV-1 核桃的數(shù)量 最小公倍數(shù)
- PREV-2 打印十字圖
- PREV-3 帶分?jǐn)?shù)
- PREV-4 剪格子 dfs ☆
- PREV-5 錯(cuò)誤票據(jù) 輸入處理 ☆
- PREV-6 翻硬幣 貪心
- PREV-7 連號(hào)區(qū)間數(shù)
- PREV-8 買不到的數(shù)目 數(shù)論/dp
- PREV-9 大臣的旅費(fèi) 兩次dfs求樹的直徑 ☆
- PREV-10 幸運(yùn)數(shù)
- PREV-11 橫向打印二叉樹
- PREV-12 危險(xiǎn)系數(shù) bfs☆
- PREV-13 網(wǎng)絡(luò)尋路 dfs☆
藍(lán)橋-歷屆試題
PREV-1 核桃的數(shù)量 最小公倍數(shù)
#include<iostream> #include<cmath> using namespace std; int find(int a,int b){int ans,tmp=1,t,p;if(a>b) {t=b; p=a;}if(a<=b) {t=a; p=b;}if(p%t==0) ans=p;else{for(int i=2;i<=t;i++){if(a%i==0&&b%i==0) tmp=i;}ans=a*b/tmp;}return ans; } int main(){int a,b,c;ios::sync_with_stdio(false);cin>>a>>b>>c;cout<<find(find(a,b),c);return 0; }PREV-2 打印十字圖
#include<stdio.h> int main() {int m,i,j,n,k;scanf("%d",&n);k=n;n=n*4+5;char a[130][130];for(i=1;i<=n;i++)for(j=1;j<=n;j++){a[i][j]='.';}for(m=1;m<=(k+1);m++){//實(shí)際比原來(lái)多一層; for(i=m*2+1;i<=n-m*2;i++)for(j=1+m*2-2;j<=n-(m*2-2);j++)a[i][j]='$',a[j][i]='$';//對(duì)稱性質(zhì); for(i=1+m*2+1;i<=n-(2*m+1);i++)for(j=m*2;j<=n-(m*2-1);j++)a[i][j]='.',a[j][i]='.';}for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%c",a[i][j]);printf("\n");// 輸出 }return 0;}PREV-3 帶分?jǐn)?shù)
#include<bits/stdc++.h> using namespace std; int vis[15],old[15]; bool check(int x){while(x){int tmp=x%10;if(tmp==0) return false;vis[tmp]++;x/=10;}return true; } bool checkOk(){if(vis[0]!=0) return false;for(int i=1;i<=9;i++){if(vis[i]!=1) return false; }return true; } int main(){int left,up,down;ios::sync_with_stdio(false);int n;cin>>n;int cnt=0;for(left=1;left<n;left++){memset(vis,0,sizeof(vis));if(!check(left)) continue;for(down=1;down<=10000;down++){memcpy(old,vis,sizeof(vis));if(!check(down)){memcpy(vis,old,sizeof(vis));continue;}up=(n-left)*down;if(!check(up)){memcpy(vis,old,sizeof(vis));continue;}if(!checkOk()){memcpy(vis,old,sizeof(vis));continue;}memcpy(vis,old,sizeof(vis));cnt++;}}cout<<cnt;return 0;PREV-4 剪格子 dfs ☆
#include<bits/stdc++.h> using namespace std; int a[15][15]={0}; int vis[15][15]={0}; int to[8][2]={-1,0,1,0,0,1,0,-1,1,1,1,-1,-1,1,-1,-1}; //可以向八個(gè)方向移動(dòng) int ans; int m,n; int aim=0; int dfs(int x,int y,int ct){if(ct==aim) return 1;int ans=0;for(int i=0;i<8;i++){int tx=x+to[i][0];int ty=y+to[i][1];if(tx>=0&&tx<n&&ty>=0&&ty<m){if(!vis[tx][ty]&&a[tx][ty]+ct<=aim){vis[tx][ty]=1;ans=dfs(tx,ty,a[tx][ty]+ct);if(ans)return ans+1;vis[tx][ty]=0;}}}return 0; }int main(){ios::sync_with_stdio(false);cin>>m>>n;for(int i=0;i<n;i++)for(int j=0;j<m;j++){cin>>a[i][j];aim+=a[i][j];}if(aim%2){cout<<0<<endl;}else{aim/=2;vis[0][0]=1;cout<<dfs(0,0,a[0][0]);}return 0; }PREV-5 錯(cuò)誤票據(jù) 輸入處理 ☆
solution-1 TLE
#include<bits/stdc++.h> using namespace std; int main(){int a[100005]={0};int N;scanf("%d",&N);int t;int min1=100005;getchar(); //吞掉多余的第一個(gè)回車for(int i=0;i<N;){ t=getchar();if(t>='0'&&t<='9'){ungetc(t,stdin); //將你讀到的字符回退到輸入流中int num;scanf("%d",&num);a[num]++;min1=min(num,min1);}else if(t=='\n') i++;}int cnt=0;int n,m;for(;;min1++){if(a[min1]==0){n=min1;cnt++;}else if(a[min1]==2){m=min1;cnt++;}if(cnt==2) break;}printf("%d %d",n,m);return 0; }solution-2 AC
//運(yùn)用getline(cin,str) 和 stringstream #include<bits/stdc++.h> using namespace std; int toInt(string word){int len=word.length();int x=0;for(int i=0;i<len;i++){x*=10;x=(x+word[i]-'0');}return x; } int main(){int num[100005]={0};int n;string s;int min1=100005;cin>>n;getchar();for(int i=0;i<n;i++) {getline(cin,s);stringstream line;line<<s;while(line){string word;line>>word;int x=toInt(word);if(x!=0){min1=min(x,min1);num[x]++;}}}int a,b;int cnt=0;for(;;min1++){if(num[min1]==0) {a=min1; cnt++;}if(num[min1]==2) {b=min1; cnt++;}if(cnt==2) break;}cout<<a<<" "<<b;return 0; }PREV-6 翻硬幣 貪心
*#include<bits/stdc++.h> using namespace std; string a,b; //處理string類型里面的char 必須要用 (char &p) void rev(char &p){if(p=='o') p='*';else if(p=='*') p='o'; } int main(){int ans=0;cin>>a>>b;int len=a.length();for(int i=0;i<len;i++){if(a[i]!=b[i]){ans++;rev(a[i]);rev(a[i+1]);}}cout<<ans;return 0; }PREV-7 連號(hào)區(qū)間數(shù)
#include<bits/stdc++.h> using namespace std; vector<int > v; int main(){ios::sync_with_stdio(false);int N;cin>>N;for(int i=0;i<N;i++){ int t;cin>>t;v.push_back(t);}int mx,mn;int ans=0;for(int i=0;i<N-1;i++){mx=v[i],mn=v[i];for(int j=i+1;j<N;j++){mx=max(mx,v[j]);mn=min(mn,v[j]);if(mx-mn==j-i) ans++;}}ans+=N;cout<<ans<<endl;return 0; }PREV-8 買不到的數(shù)目 數(shù)論/dp
solution-1 數(shù)論 AC
#include<iostream> using namespace std; int main(){int a,b;cin>>a>>b;cout<<a*b-a-b;return 0; }solution-2 簡(jiǎn)單dp AC
#include<bits/stdc++.h> using namespace std; int dp[100000]; int main(){ios::sync_with_stdio(false);int n,m;cin>>n>>m;memset(dp,0,sizeof(dp));dp[n]=1;dp[m]=1;for(int i=max(m,n)+1;i<m*n;i++){if(dp[i-m]||dp[i-n])dp[i]=1;}for(int i=m*n-1;i>0;i--){if(!dp[i]){cout<<i<<endl;break;}}return 0; }PREV-9 大臣的旅費(fèi) 兩次dfs求樹的直徑 ☆
#include<bits/stdc++.h> using namespace std; struct Node{int to;int dis;Node(int a,int b):to(a),dis(b){} }; int goal,max1=-1; //goal保存終點(diǎn)下標(biāo) int vis[10005]; //記錄是否訪問過(guò)因?yàn)槭菬o(wú)向圖 vector<Node> v[10005]; int payfor(int x){int ans=10*x; ;for(int i=1;i<=x;i++){ans+=i;}return ans; }void dfs(int s,int sum){vis[s]=1;if(sum>max1){max1=sum; goal=s;}for(int i=0;i<v[s].size();i++){Node t=v[s][i];if(!vis[t.to]){dfs(t.to,sum+t.dis);}} }int main(){ios::sync_with_stdio(false);int n;cin>>n;memset(vis,0,sizeof(vis));for(int i=1;i<n;i++){int a,b,c;cin>>a>>b>>c;v[a].push_back(Node(b,c));v[b].push_back(Node(a,c));}dfs(1,0);memset(vis,0,sizeof(vis));dfs(goal,0);cout<<payfor(max1);return 0; }PREV-10 幸運(yùn)數(shù)
#include<bits/stdc++.h> using namespace std; int m,n; int vis[1000005],a[1000005]; int main(){ios::sync_with_stdio(false);cin>>m>>n;memset(vis,0,sizeof(vis));memset(a,0,sizeof(a));int tmp,cnt,ans=0;while(!ans){tmp=0,cnt=0;bool t=false;for(int i=2;i<=n;i++){if(!a[i]&&!vis[i]){tmp=i;vis[i]=1;t=true;break;}t=false;}if(t==false) break;for(int i=1;i<=n;i++){if(!a[i]) cnt++;if(cnt==tmp){a[i]=1;cnt=0;}}}for(int i=m+1;i<n;i++){if(!a[i]) ans++;}cout<<ans;return 0; }PREV-11 橫向打印二叉樹
No SolutionPREV-12 危險(xiǎn)系數(shù) bfs☆
#include<bits/stdc++.h> using namespace std; int n,m,ans; int e[2000][2],vis[2000]; vector<int> v[1001]; void creat(){int j;int from,to;for(j=0;j<m;j++){cin>>from>>to;e[j][0]=from,e[j][1]=to;v[from].push_back(to);v[to].push_back(from);} } void check(int a,int from,int to){int ok=0;queue<int> q;vis[from]=1;q.push(from);while(!q.empty()){int t=q.front();q.pop();for(int i=0;i<v[t].size();i++){if(v[t][i]==a) continue;if(vis[v[t][i]]==0)if(v[t][i]!=to) {q.push(v[t][i]);vis[v[t][i]]=1;}else {ok=1;break;} }if(ok==1)break;}if(ok==0) ans++; } int main(){int from,to;cin>>n>>m;creat();cin>>from>>to;check(0,from,to);if(ans) {cout<<-1;return 0; }for(int i=1;i<n;i++){if(i==from||i==to) continue;memset(vis,0,sizeof(vis));check(i,from,to);}cout<<ans;return 0; }PREV-13 網(wǎng)絡(luò)尋路 dfs☆
#include<bits/stdc++.h> using namespace std; vector<int>g[10003]; int book[10003]; int n,m,ans,root; void dfs(int x,int cnt){if(cnt==4){ans++;return;}for(int i=0;i<g[x].size();i++){if(!book[g[x][i]]){book[g[x][i]]=1;dfs(g[x][i],cnt+1);book[g[x][i]]=0;}else if(cnt==3&&g[x][i]==root){dfs(g[x][i],cnt+1);}} } int main(){ios::sync_with_stdio(false);cin>>n>>m;for(int i=0;i<m;i++){int x,y;cin>>x>>y;g[x].push_back(y);g[y].push_back(x);}for(int i=1;i<=n;i++){memset(book,0,sizeof(book));book[i]=1;dfs(root=i,1);}cout<<ans;return 0; }總結(jié)
以上是生活随笔為你收集整理的Maskros的蓝桥刷题之路(1-13)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rust学习资料大全
- 下一篇: 数据结构实验二:迷宫的求解