zoukankan      html  css  js  c++  java
  • 2021团体程序设计天梯赛 L3-2 还原文件

    思路:

    dfs+回溯,不加回溯只有26分

    Tip:

    直接拿纸条往上怼

    #include <bits/stdc++.h>

    using namespace std;

    const int maxn = 100000 + 5;

    struct mmp {
    int i;
    int at;
    vector<int> v;
    } member[105];

    int number[maxn];
    int n, p;
    bool flag = false;

    bool cmp1(mmp a, mmp b) {
    return a.v.size() > b.v.size();
    }

    bool cmp2(mmp a, mmp b) {
    return a.at < b.at;
    }

    void dfs(int now) {
    if (now == n && !flag) {
    flag = true;
    sort(member + 1, member + 1 + p, cmp2);
    bool first = true;
    for (int i = 1; i <= p; i++) {
    if (first) {
    first = false;
    cout << member[i].i;
    } else
    cout << " " << member[i].i;
    }
    return;
    }
    for (int i = 1; i <= p; i++) {
    bool flag1 = true;
    for (int j = 0; j < member[i].v.size(); j++) {
    if (member[i].v[j] != number[now + j]) {
    flag1 = false;
    break;
    }
    }
    if (flag1) {
    member[i].at = now;
    dfs(now + member[i].v.size() - 1);
    if (flag)
    return;
    }
    }
    }

    int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
    cin >> number[i];
    }
    cin >> p;
    for (int i = 1; i <= p; i++) {
    int t;
    cin >> t;
    member[i].i = i;
    for (int j = 1; j <= t; j++) {
    int tmp;
    cin >> tmp;
    member[i].v.push_back(tmp);
    }
    }
    sort(member + 1, member + 1 + p, cmp1);
    dfs(1);
    return 0;
    }
  • 相关阅读:
    Python笔记 【无序】 【五】
    Python笔记 【无序】 【四】
    Python 面向对象【2】
    Python 面向对象【1】
    OpenCV 入门
    Python笔记 【无序】 【三】
    js制作秒表
    C语言No such file or directory错误
    js注册实现
    js中setTimeout和setInterval的应用方法(转)
  • 原文地址:https://www.cnblogs.com/Whiteying/p/14707815.html
Copyright © 2011-2022 走看看