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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

牛客竞赛语法入门班数组栈、队列和stl习题【未完成】

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客竞赛语法入门班数组栈、队列和stl习题【未完成】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題單地址:https://ac.nowcoder.com/acm/contest/19850?from=acdiscuss

目錄

  • 老子的全排列呢
  • 裝進肚子
  • 牛牛的三角形
  • [NOIP1998]拼數
  • 好串
  • Rails
  • 棧和排序
  • 吐泡泡
  • Keep In Line
  • Number
  • 指紋鎖
  • younik要排號

老子的全排列呢

#include<bits/stdc++.h> using namespace std; int a[15]; int main(void) {for(int i=0;i<8;i++) a[i]=i+1;do{for(int i=0;i<8;i++) cout<<a[i]<<" ";cout<<endl;}while(next_permutation(a,a+8));return 0; }

裝進肚子

#include<bits/stdc++.h> using namespace std; struct node{int a,b;}Node[100005]; bool cmp(node a,node b) {return a.a-a.b<b.a-b.b; } int main(void) {int n,k; cin>>n>>k;for(int i=0;i<n;i++) cin>>Node[i].a;for(int i=0;i<n;i++) cin>>Node[i].b;sort(Node,Node+n,cmp);long long int sum=0;for(int i=0;i<n-k;i++) sum+=Node[i].b;for(int i=n-k;i<n;i++) sum+=Node[i].a;cout<<sum<<endl;return 0; }

牛牛的三角形

#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int a[N],n; bool check(int s1,int s2,int s3) {return s1+s2>s3; } int main(void) {cin>>n;for(int i=0;i<n;i++) cin>>a[i];sort(a,a+n);for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){for(int k=j+1;k<n;k++){if(check(a[i],a[j],a[k])) {cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<endl;return 0;}}}}puts("No solution");return 0; }

[NOIP1998]拼數

#include<bits/stdc++.h> using namespace std; string s; vector<string>ve; bool cmp(string a,string b) {return a+b>b+a;} int main(void) {int n; cin>>n;while(n--) cin>>s,ve.push_back(s);sort(ve.begin(),ve.end(),cmp);for(int i=0;i<ve.size();i++) cout<<ve[i]; }

好串

#include<bits/stdc++.h> using namespace std; stack<char>st; int main(void) {string s; cin>>s;for(int i=0;i<s.size();i++){if(s[i]=='a'|| !st.size()) st.push(s[i]);else{if(st.top()=='a'&&s[i]=='b') st.pop();else st.push(s[i]);}}if(st.size()) cout<<"Bad";else cout<<"Good";return 0; }

Rails

題目的意思: 就是給我們一個排列,看1-n的入棧順序,出棧可不可以構成這個排列。

#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int a[N],n; int main(void) {while(cin>>n,n!=0){while(cin>>a[0],a[0]!=0){for(int i=1;i<n;i++) cin>>a[i];stack<int>st;for(int i=0,k=1;k<=n;k++){st.push(k);while(st.size()&&st.top()==a[i]) st.pop(),i++;}if(st.size()) puts("No");else puts("Yes");}cout<<endl;}return 0; }

棧和排序


錯誤的想法就是,將入棧順序保存,并從大到小排序。然后枚舉入棧順序比對,如果是比對的,則輸組向后移動一位,
否則入棧。

6 6 4 3 5 1 2 正解: 6 5 3 4 2 1 錯誤解:6 5 2 1 3 4

正解:就是用一個數組保存,該位置向后的最大值。

#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int a[N],s[N],n; int main(void) {cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int i=n;i>=1;i--) s[i]=max(a[i],s[i+1]);stack<int>st;for(int i=1;i<=n;i++){st.push(a[i]);if(a[i]>=s[i]) cout<<a[i]<<" ",st.pop();//該值比后面的值都大while(st.size()&&st.top()>s[i+1]) cout<<st.top()<<" ",st.pop();} while(st.size()) cout<<st.top()<<" ",st.pop();return 0; }

吐泡泡

#include<bits/stdc++.h> using namespace std; int main(void) {string s; while(cin>>s){deque<char>q;for(int i=0;i<s.size();i++){if(!q.size()||(q.back()=='o'&&s[i]=='O') || (q.back()=='O'&&s[i]=='o')) q.push_back(s[i]);else {bool flag=1;q.push_back(s[i]);while(flag&&q.size()>1){auto temp1=q.back(); q.pop_back();auto temp2=q.back(); q.pop_back();if(temp1==temp2&&temp1=='o') q.push_back('O');else if(temp1!=temp2){flag=0;q.push_back(temp2);q.push_back(temp1);}}}}while(q.size()) cout<<q.front(),q.pop_front();cout<<endl;}return 0; }

Keep In Line

#include<bits/stdc++.h> using namespace std; int t,n; int main(void) {cin>>t;while(t--){cin>>n;queue<string>q;map<string,int>mp;int cnt=0;for(int i=0;i<n;i++){string op,s; cin>>op>>s;mp[s]++;if(op=="in") q.push(s);else{mp[s]=0;if(q.front()!=s) cnt++;}while(q.size()&&!mp[q.front()]) q.pop();}cout<<mp.size()-cnt<<endl;}return 0; }

Number

#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int cnt,prime[N],st[N],ans; set<int>s; void init() {int n=7073;for(int i=2;i<=n;i++){if(!st[i]) prime[cnt++]=i;for(int j=0;prime[j]<=n/i;j++){st[i*prime[j]]=1;if(i%prime[j]==0) break;}} } int main(void) {init();int n; cin>>n;for(int i=0;i<cnt;i++){if(pow(prime[i],2)<n)for(int j=0;j<cnt;j++){if(pow(prime[j],3)<n)for(int k=0;k<cnt;k++){int sum=pow(prime[i],2)+pow(prime[j],3)+pow(prime[k],4);if(sum>n) break;s.insert(sum);}}}cout<<s.size();return 0; }

指紋鎖

#include<bits/stdc++.h> using namespace std; int n,k; struct cmp {bool operator ()(const int& a, const int& b)const {if(abs(a - b) <= k)return false;return a < b;} }; set<int,cmp>st; int main(void) {std::ios::sync_with_stdio(false);std::cin.tie(0);cin>>n>>k;while(n--){string op;int x; cin>>op>>x;if(op=="add") st.insert(x);else if(op=="del") st.erase(x);else {if(st.find(x)!=st.end()) cout<<"Yes"<<'\n';else cout<<"No"<<'\n';}}return 0; }

younik要排號

#include<bits/stdc++.h> using namespace std; set<string>st; int main(void) {int n; cin>>n;for(int i=0;i<n;i++){string s; cin>>s;if(s!="younik") st.insert(s);else{cout<<st.size()+1<<endl;return 0;}}return 0; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的牛客竞赛语法入门班数组栈、队列和stl习题【未完成】的全部內容,希望文章能夠幫你解決所遇到的問題。

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