UVALive 3634 数据结构模拟

这题真是坑啊,题意不明,其实就是往桟里面压入空的set集合,所以之前的询问大小都是只有0,只有add的时候,才会产生新的占空间的集合

用stack和set直接进行模拟

#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
#include <stack>
#include <map>
using namespace std;
int cnt;
set<int>s1,s2;
stack<set<int> > s;
map<set<int> , int> mp;
void pop()
{
    s1=s.top();
    s.pop();
    s2=s.top();
    s.pop();
}
void push()
{
    set<int> tmp;
    s.push(tmp);
    puts("0");
}
void dup()
{
    s.push(s.top());
    printf("%d\n",s.top().size());
}
void uni()
{
    pop();
    for (set<int>::iterator it=s1.begin();it!=s1.end();it++){
        s2.insert(*it);
    }
    s.push(s2);
    printf("%d\n",s2.size());
}
void inter()
{
    pop();
    set<int> s3;
    for (set<int>::iterator it=s1.begin();it!=s1.end();it++){
        if (s2.find(*it)!=s2.end()){
            s3.insert(*it);
        }
    }
    s.push(s3);
    printf("%d\n",s3.size());
}
void add()
{
    pop();
    if (s1.empty()){
        s2.insert(0);
    }
    else {
        if (!mp[s1]){
            mp[s1]=cnt++;
        }
        s2.insert(mp[s1]);
    }
    s.push(s2);
    printf("%d\n",s2.size());
}
int main()
{
    int t;
    scanf("%d",&t);
    char str[20];
    while (t--)
    {
        cnt=1;
        int m;
        scanf("%d",&m);
        while (!s.empty()) s.pop();
        mp.clear();
        while (m--)
        {
            scanf("%s",str);
            if (str[0]==‘P‘) push();
            if (str[0]==‘D‘) dup();
            if (str[0]==‘A‘) add();
            if (str[0]==‘U‘) uni();
            if (str[0]==‘I‘) inter();
        }
        puts("***");
    }
    return 0;
}

  

UVALive 3634 数据结构模拟

时间: 2024-10-29 02:39:21

UVALive 3634 数据结构模拟的相关文章

数据结构模拟题

全真模拟试题(一)一.单项选择题(在每小题的4个备选答案中,选出正确的答案,并将其号码填在题干的括号内.每小题2分,共24分)1.若某线性表中最常用的操作是取第i 个元素和找第i个元素的前趋元素,则采用( )存储方式最节省时间.①单链表 ②双链表 ③单向循环 ④顺序表2.串是任意有限个( )①符号构成的序列 ②符号构成的集合③字符构成的序列 ④字符构成的集合3.设矩阵A(aij ,l≤i,j≤ 10)的元素满足:aij≠0(i≥j, l≤i, j≤ 10)aij=0 (i<j, l≤i, j≤

【12】python 栈型数据结构模拟、队列型数据结构模拟

一.压栈操作模拟 #__author:"吉*佳" #date: 2018/10/21 0021 #function:栈 # 栈:即是先进后出的一种数据结构 # (1)模拟压栈操作 stack=[] flag=True while flag: temp = input("请输入压栈元素[输入0代表退出]:") if temp!=str(0): stack.append(temp) else: print('压栈结束,栈内元素为:', stack) # 借助flag退出

UVALive 3971 Assemble(模拟 + 二分)

UVALive 3971 题意:有b块钱,想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一般用二分法. 在(0,maxq)内进行二分,判定q作为最差品质因子是否可行. 大白书原题,比较考验代码功底. code: /* * @author Novicer * language : C++/C */ #include<iostream> #include<sstream> #i

UVALive 6451:Tables(模拟 Grade D)

VJ题目链接 题意:模拟输出表格 思路:模拟……很暴力 代码: #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; int graph[100][100]; int main() { int n; while (scanf("%d", &n) != EOF) { if (n == 0) b

用LinkedList模拟一个堆栈或者队列数据结构 总结: LinkedList知识点

/** 用LinkedList模拟一个堆栈或者队列数据结构. 创建一个堆栈和队列数据结构对象,该对象中使用LinkedList来完成的. 知识点总结: 1.LinkedList特点:链表式数据结构. 重复有序,查询速度慢,增删速度快.不同步的. 2.LinkedList除了实现List接口增删改查的功能外,有一些特有的方法,能够实现在List(列表)的开头和结尾 插入,删除,获取等特有功能.这就是为什么LinkedList能够模拟一个堆栈,或者队列,双端队列的数据结构了. 涉及知识点: 1.什么

3-9-模拟银行排队过程-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 模拟银行排队过程 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SinglyLinkedList.c.LinkQueue

java实现链表模拟LinkedList类

LinkedList类底层数据结构 模拟: 1 package Collection; 2 3 public class MyLinkedList { 4 Node first; 5 Node last; 6 private int size; 7 public MyLinkedList(){ 8 9 } 10 /* 11 * 添加一个新对象 12 * */ 13 public boolean add(Object obj){ 14 Node node = new Node(); 15 if(f

校内集训 miku set模拟冒泡排序 逆序对

题意 给你一个长为\(n\)的序列,进行\(m\)次操作,每次对一个区间进行排序,求最后的序列\((n <= 1500, m <= 1e6)\) 这道题目思维难度挺大的 对于一个序列,排序的本质就是消除里面的所有逆序对 考虑冒泡排序的过程,每次也是交换\(a[i]>a[i+1]\)这个逆序对 这样子交换最多有\(n^2\)次 那么我们可以用一个数据结构模拟冒泡排序交换逆序对这个过程 用一个\(set\)维护所有逆序对的位置 每次暴力删除区间内所有逆序对 再把新产生的逆序对加入\(set\

php 常用的系统函数

php 常用的系统函数 本文介绍了php 常用的系统函数,具有很好的参考价值,下面跟着 大宝儿 一起来看下吧 字符串函数        strlen():获取字符串长度,字节长度 substr():字符串截取,获取字符串(按照字节进行截取) strchr():与substr相似,从指定位置截取一直到最后 strrchr(获取文件后缀名):与strchr一样,只是从右边开始查找字符 strtolower():所有的字符都小写(针对英文字母) strtoupper():所有的字符都大写 strrev