C 题图论欧拉回路, 还没写, 因为太饿了, 待补
- A.Raffle for Weibo Followers
- #include<bits/stdc++.h>
- using namespace std;
- int m,n,s;
- vector<string> person;
- set<string> se;
- vector<string> ans;
- int main(){
- cin>>m>>n>>s;
- for(int i=1;i<=m;i++){
- string name;
- cin>>name;
- person.push_back(name);
- }
- int num = person.size();
- // for(int i=0;i<num;i++) cout<<person[i]<<endl;
- if(s> num) puts("Keep going...");
- else{
- int pos = s-1;
- while(pos <num){
- if(se.find(person[pos]) == se.end()){
- se.insert(person[pos]);
- // cout<<pos<<endl;
- ans.push_back(person[pos]);
- pos = pos + n;
- }else{
- pos++;
- }
- }
- for(int i=0;i<ans.size();i++) cout<<ans[i]<<endl;
- }
- return 0;
- }
B.Chain the Ropes 优先队列
- #include<bits/stdc++.h>
- using namespace std;
- priority_queue<int,vector<int>,greater<int>> que;
- int n;
- int main(){
- cin>>n;
- for(int i=1;i<=n;i++){
- int d;
- cin>>d;
- que.push(d);
- }
- while(que.size() != 1){
- int fir = que.top();
- que.pop();
- int sec = que.top();
- que.pop();
- int thir = (fir + sec)/2;
- que.push(thir);
- }
- cout<<que.top();
- return 0;
- }
- C.Eulerian Path
还没做, 图论, 欧拉回路
D.ZigZagging on a Tree
二叉树, 中序后序建树, 输出 Z 字型层次遍历的结果
- #include<bits/stdc++.h>
- using namespace std;
- const int maxn = 50;
- int n;
- int post[maxn];
- int in[maxn];
- vector<int> ans[maxn];
- struct node{
- int v;
- node *l;
- node *r;
- };
- int maxDepth = 0;
- void dfs(node *root,int depth){
- if(depth> maxDepth) maxDepth = depth;
- ans[depth].push_back(root->v);
- if(root->l) dfs(root->l,depth+1);
- if(root->r) dfs(root->r,depth+1);
- }
- node * build(int root,int il,int ir) {
- if (il> ir) return NULL;
- int pos = il;
- while (pos <= ir && in[pos] != post[root])
- pos++;
- node* Root = new node;
- Root->v = post[root];
- Root->r = build(root-1, pos+1,ir );
- Root->l = build(root-(ir-pos)-1 ,il,pos - 1);
- return Root;
- }
- int main(){
- cin>>n;
- for(int i=1;i<=n;i++) cin>>in[i];
- for(int i=1;i<=n;i++) cin>>post[i];
- node *Root = new node();
- Root = build(n,1,n);
- dfs(Root,1);
- cout<<ans[1][0];
- for(int i=2;i<=maxDepth;i++){
- if(i%2==0){
- for(int j=0;j<ans[i].size();j++){
- cout<<" "<<ans[i][j];
- }
- }else{
- for(int j=ans[i].size()-1;j>=0;j--){
- cout<<" "<<ans[i][j];
- }
- }
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-3319262.html