牛客竞赛语法入门班数组栈、队列和stl习题【未完成】
生活随笔
收集整理的這篇文章主要介紹了
牛客竞赛语法入门班数组栈、队列和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; }棧和排序
錯誤的想法就是,將入棧順序保存,并從大到小排序。然后枚舉入棧順序比對,如果是比對的,則輸組向后移動一位,
否則入棧。
正解:就是用一個數組保存,該位置向后的最大值。
#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习题【未完成】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客竞赛语法入门班函数与递归习题【未完结
- 下一篇: 牛客竞赛语法入门班数组模拟、枚举、贪心习