51nod 1590 合并数字

1590 合并数字

STL - List 练习题,

直接用 List 模拟题意即可,或者手写链表也行。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
list<int> List[N];
int main(){
    int n,x,y,y_idx,x_idx;
    cin >> n ;
    for(int i = 1;i <= n; ++i){//初始化全为 i
        List[i].push_back(i);
    }
    for(int i = 1;i <= n-1; ++i){ // n-1 次 合并操作
        cin >> x >> y;
        for(int j = 1;j <= n; ++j){// 找到 y
            if(List[j].front() == y){
                y_idx = j;
                break;
            }
        }
        for(int j = 1;j <= n; ++j){// 找到 x
            if(List[j].front() == x){
                for(auto it = List[y_idx].begin();it != List[y_idx].end(); ++it){
                    List[j].push_back(*it);// 把 y 链表上的所有数字放到 x 的末尾
                }
                List[y_idx].clear();// 清空 y
                break;
            }
        }
        x_idx = x;// 最后一次的 x 即最终的链表(每次赋值更新)
    }
    for(auto it = List[x_idx].begin(); it != List[x_idx].end(); ++it){
        cout << *it << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/lukelmouse/p/11715681.html

时间: 2024-08-29 21:09:46

51nod 1590 合并数字的相关文章

51nod 1770 数数字

1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题  收藏  关注 统计一下 aaa ? aaan个a × b 的结果里面有多少个数字d,a,b,d均为一位数. 样例解释: 3333333333*3=9999999999,里面有10个9. Input 多组测试数据. 第一行有一个整数T,表示测试数据的数目.(1≤T≤5000) 接下来有T行,每一行表示一组测试数据,有4个整数a,b,d,n. (1≤a,b≤9,0≤d≤

ACM学习历程—51NOD 1770数数字(循环节)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的A题.由于数字全部相同,乘上b必然会有循环节,于是模拟乘法,记录数据,出现循环就退出即可. 代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring>

51Nod - 1385 凑数字

51Nod - 1385 如果是n位数,x1 x2 x3 ... xn 从1到n的所有数中位数n-1的数字一定含有 1111...11,2222...22,...,9999...99 对于0 考虑n位数1000...00 其中有n-1个0 那么n-1位数中0-9都应该有n-1个(ans += 10*(n-1)) 考虑第一位数x1需要1, 2, 3, ..., x1(ans += x1) 但是如果第一位数大于第二位数 比如21 这时2最多出现一次,以为最高位出现时, 它的下一位不能出现2, 但是如

51nod 1132 覆盖数字的数量 V2

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1132 题意是给定a,b,l,r求[l,r]内有几个整数可以表示成ax+by(x,y为非负整数). 直接算l<=ax+by<=r会重复计算一个数的多种表示方法,而两种表示方法(x,y)总是相差k*(b,-a),因此限制y取最小值进行去重 即x>=0,y>=0,l<=ax+by<=r,y<a/gcd(a,b)五个半平面的交的整点个数,可以分类

合并数字

//ES5合并数组 var arr = [12,true,5]; var arrCont = [1,6,66].concat(arr); console.log(arrCont);//[1, 6, 66, 12, true, 5] //ES6 var arr = [12,true,5]; var arrList = [35,66,34,...arr]; console.log(arrList);//[35, 66, 34, 12, true, 5] 原文地址:https://www.cnblog

2048游戏回顾二:算法总结(移动、合并、动画等)

如果只是单纯的写一个2048游戏,让这个游戏可以玩的话,工作量还是蛮小的.不过,在这写工作中,你可能花时间最多的就是数字的移动与合并的算法了,如果没有做过,可能确实要花点时间来构思,所以,写完2048游戏以后,我希望能把它做个记录. 移动与合并的算法 比如说我们有如下一个界面: 现在,玩家向左划,这个导致所有的数字向左移动,并且移动的过程中如果发生碰撞,会检查数字是不是可以合并. 我们的算法应该是通用的,不仅对于4*4模式,即便是针对3*3模式,n*n模式,它都应该是一样的. 那么怎么做呢?其实

2048游戏回想二:算法总结(移动、合并、动画等)

假设仅仅是单纯的写一个2048游戏.让这个游戏能够玩的话,工作量还是蛮小的.只是,在这写工作中,你可能花时间最多的就是数字的移动与合并的算法了,假设没有做过,可能确实要花点时间来构思,所以.写完2048游戏以后,我希望能把它做个记录. 移动与合并的算法 比方说我们有例如以下一个界面: 如今.玩家向左划.这个导致全部的数字向左移动,而且移动的过程中假设发生碰撞.会检查数字是不是能够合并. 我们的算法应该是通用的.不仅对于4*4模式,即便是针对3*3模式.n*n模式,它都应该是一样的. 那么怎么做呢

PTA 5-8(English) File Transfer (25) - 并查集 - 数组实现

题目:http://pta.patest.cn/pta/test/16/exam/4/question/670 PTA - Data Structures and Algorithms (English) - 5-8 We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer t

是男人就下100层【第五层】——2048游戏

前言: 在"阳光小强"的实战系列博文<是男人就下100层>的上一层我们一起从零开始完成了我们自己的贪吃蛇游戏--CrazySnake,可能很多朋友还不过瘾,那么我们今天就来玩一玩最近一直比较火的2048游戏,让大家再过一把瘾.由于"阳光小强"目前并没有从事Android的游戏开发工作,所以这些游戏的实现并不需要很专业的游戏开发知识,如果你有Android的基础就可以一起来参与进来共同完成这个游戏.有些朋友可能就会说"这些小游戏,会不会有点简单,