蓝桥 算法提高 盾神与条状项链

来源:互联网 发布:cfd软件难学吗 编辑:程序博客网 时间:2024/04/28 00:55
#include <cstdio>#include <algorithm>#include <vector>using namespace std;int n,m,p,q;char s[5];int main(){while (~scanf ("%d%d",&n,&m)) {vector<int> v;for (int i=0;i<n;i++) {scanf ("%d",&p);v.push_back(p);}while (m--) {scanf ("%s",s);if (s[0]=='A') {scanf ("%d%d",&p,&q);for (int i=0;i<v.size();i++) {if (v[i]==p) {v.insert(v.begin()+i,q);break;}}}else if (s[0]=='D') {scanf ("%d",&p);for (int i=0;i<v.size();i++) {if (v[i]==p) {v.erase(v.begin()+i);break;}}}}printf ("%d\n%d",v.size(),v[0]);for (int i=1;i<v.size();i++)     printf (" %d",v[i]);puts("");}return 0;}

学长版

#include <bits/stdc++.h>using namespace std;class List{    struct Node{        int value;        Node* next;        Node(int _v = 0): value(_v){next = NULL;}    };    Node* head;    int Size;public:    List(){Size = 0, head = new Node();}    int size(){return Size;}    void push_front(int s){        Node* p = new Node(s);        p -> next = head -> next;        head -> next = p;        Size++;    }    void pop(int s){    for(Node* p = head; p->next; p = p->next){    if(p->next->value == s){    p->next = p->next->next;    Size--;    break;    }    }    }    void add(int P, int Q){    for(Node* p = head; p->next; p = p->next){    if(p->next->value == P){    Size++;    Node* k = new Node(Q);    k->next = p->next;    p->next = k;    break;    }    }    }    void print(){        for(Node *p = head->next; p; p = p->next)            printf("%d ", p->value);    }};int main(){    stack<int> s;    List l;    int n, m, k;    cin >> n >> k;    for(int i = 0; i < n; i++){        scanf("%d", &m);        s.push(m);    }    while(s.size()) {        l.push_front(s.top());        s.pop();    }    while(k--){        int p, q;        char s[8];        scanf("%s", s);        if(s[0] == 'A'){            scanf("%d%d",&p, &q);            l.add(p, q);        }        else{            scanf("%d", &p);            l.pop(p);        }    }    cout << l.size() << endl;    l.print();    return 0;}


0 0
原创粉丝点击