zoukankan      html  css  js  c++  java
  • CCCC L2-002. 链表去重

    https://www.patest.cn/contests/gplt/L2-002

    模拟一个链表的去重操作

    题解:别模拟了,直接用内置的list和map。关于输出的地址,直接用pair存地址和值,输出时按地址 值 下一个元素的地址 输出。

    坑:之前头铁,模拟了半天,各种错误。

    然后直接用list  注意删除,输出的细节。删除是常规技巧。输出时注意判掉最后一个节点,输出-1. 关于如何访问list的next:直接it++

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <cmath>
    #include <cstring>
    #include <string>
    #include <map>
    #include<stack>
    #include<set>
    #include<string.h>
    #include<list>
    #define pb push_back
    #define mp make_pair
    #define _for(i, a, b) for (int i = (a); i<(b); ++i)
    #define _rep(i, a, b) for (int i = (a); i <= (b); ++i)
    
    using namespace std;
    const  int N = 100000 + 5;
    //double num[N], price[N], ave[N];
    int nxt[N], val[N];
    int nxt1[N];
    map<int, int> p;
    list<pair<int, int> >l,ll;
    int main() {
        int head, n;
        cin >> head >> n;
        _for(i, 0, n) {
            int x;
            cin >> x;
            cin >> val[x] >> nxt[x];
    
        }
    
        for (int p = head; p != -1; p = nxt[p]) {
            l.push_back(mp(p, val[p]));
        }
        
        list<pair<int, int> >::iterator it;
        for (it = l.begin(); it != l.end();){
        if (p.count(abs(it->second))) {
            ll.push_back(*it);
            it = l.erase(it);
        }
        else p[abs(it->second)]++, it++;
    }
        for (it = l.begin(); it != l.end(); ) {
            printf("%05d %d ", it->first, it->second);
            //cout << it->first << ' ' << it->second << ' ';
            if (++it != l.end())printf("%05d
    ", it->first);//cout<< it->first << endl;
                else cout << -1 << endl;
        }
        for (it = ll.begin(); it != ll.end(); ) {
            printf("%05d %d ", it->first, it->second);
            //cout << it->first << ' ' << it->second << ' ';
            if (++it != ll.end())printf("%05d
    ", it->first);//cout<< it->first << endl;
            else cout << -1 << endl;
        }
        system("pause");
    
    
    }
    /*
      00100 5
    99999 15 87654
    23854 15 00000
    87654 15 -1
    00000 15 99999
    00100 15 23854
    */
    /*
    00100 -15 23854
    23854 -15 00000
    00000 21 99999
    99999 -7 87654
    87654 15 -1
    00000 21 -1
    */
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    android 如何引用jar包
    ExoPlayer + 边缓存边播放
    adb打开系统设置的命令
    android 8.0 适配(总结)
    android 7.0适配(总结)
    android 6.0适配(总结)
    常用adb命令
    nginx 简介
    Marshmallow 的用法
    python 自动生成当前项目的requirements文件
  • 原文地址:https://www.cnblogs.com/SuuT/p/8668290.html
Copyright © 2011-2022 走看看