zoukankan      html  css  js  c++  java
  • Fundamental Datastructure

    11988 - Broken Keyboard (a.k.a. Beiju Text)

    可以用deque来模拟。

    #include <iostream>
    #include <string>
    #include <string.h>
    #include <stdio.h>
    #include <queue>
    using namespace std;
    
    const int MAX = 100005;
    
    char ch[MAX];
    
    int main() {
        while (scanf("%s", ch) != EOF) {
            deque<string> Q;
            string buffer = "";
            int toward = 1;
            int n = strlen(ch);
            
            for (int i = 0; i < n; i++) {
                if (ch[i] == '[') {
                    if (toward > 0)  Q.push_back(buffer);
                    else  Q.push_front(buffer);
                    toward = -1;
                    buffer = "";
                } else if (ch[i] == ']') {
                    if (toward > 0)  Q.push_back(buffer);
                    else  Q.push_front(buffer);
                    toward = 1;
                    buffer = "";
                } else {
                    buffer += ch[i];
                }
            }
    
            if (toward > 0)  Q.push_back(buffer);
            else  Q.push_front(buffer);
    
            for (int i = 0; i < Q.size(); i++) {
                printf("%s", Q[i].c_str());
            }
            printf("
    ");
        }
    }

    10410 - Tree Reconstruction

    一点点解析。

    #include <cstdio>
    #include <vector>
    using namespace std;
    
    const int MAXN = 1005;
    
    int n, bfs[MAXN], dfs[MAXN];
    int idx[MAXN], root[MAXN];
    
    int main() {
        while (scanf("%d", &n) != EOF) {
            for (int i = 0; i < n; i++)  scanf("%d", &bfs[i]);
            for (int i = 0; i < n; i++)  scanf("%d", &dfs[i]);
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (bfs[i] == dfs[j]) {
                        idx[i] = j;
                        break;
                    }
                }
            }      
            int p = 1;
            for (int i = 0; i < n; i++) {
                root[i] = bfs[0];
            }
            vector<vector<int> > tree(n + 1);
            while (p < n) {
                vector<int> sons;
                sons.push_back(p);
                int max_idx = idx[p];
                int i;
                for (i = p + 1; i < n; i++) {
                    if (root[idx[i]] != root[idx[p]] || idx[i] < max_idx) {
                        break;
                    }
                    max_idx = idx[i];
                    sons.push_back(i);
                }
                tree[root[idx[p]]] = sons;
                p = i;
                for (i = sons.size() - 1; i >= 0; i--) {
                    int j = idx[sons[i]];
                    int r = root[j];
                    while (j < n && root[j] == r) {
                        root[j++] = bfs[sons[i]];
                    }
                }
            }
            for (int j = 1; j <= n; j++) {
                printf("%d:", j);
                for (int k = 0; k < tree[j].size(); k++) {
                    printf(" %d", bfs[tree[j][k]]);
                }
                printf("
    ");
            }
        }
    }

    10895 - Matrix Transpose

    行列互换后排序。

    #include <cstdio>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    struct Data {
        int r, c, v;
        bool operator < (const Data& d) const {
            if (r != d.r) {
                return r < d.r;
            } else {
                return c < d.c;
            }
        }
    };
    
    int main() {
        int m, n;
        while (scanf("%d%d", &m, &n) != EOF) {
            vector<Data> datas;
            for (int i = 1; i <= m; i++) {
                int r;
                scanf("%d", &r);
                for (int j = 0; j < r; j++) {
                    Data d;
                    scanf("%d", &d.r);
                    d.c = i;
                    datas.push_back(d);
                }
                for (int j = 0; j < r; j++) {
                    scanf("%d", &datas[datas.size() - r + j].v);
                }
            }
            sort(datas.begin(), datas.end());
            int mm = 1, i = 0;
            printf("%d %d
    ", n, m);
            while (mm <= n) {
                vector<Data> row;
                while (i < datas.size() && datas[i].r == mm) {
                    row.push_back(datas[i]);
                    i++;
                }
                mm++;
                printf("%d", (int)row.size());
                for (int j = 0; j < row.size(); j++) {
                    printf(" %d", row[j].c);
                }
                printf("
    ");
                for (int j = 0; j < row.size(); j++) {
                    if (j)  printf(" ");
                    printf("%d", row[j].v);
                }
                printf("
    ");
            }
        }
    }
  • 相关阅读:
    java 反射 处理 空值
    jquery之data()
    jquery里面的$.each()方法
    Normalize.css 样式作用,及使用方法
    robots.txt、humans.txt、.editorconfig、.gitignore、LICENSE.txt、README.md、CHANGLOG.md
    常见的js算法
    javascript设计模式详解
    ES6的相关信息
    轮播图插件
    webstrom随手笔记
  • 原文地址:https://www.cnblogs.com/litstrong/p/3285136.html
Copyright © 2011-2022 走看看