`
king_tt
  • 浏览: 2190889 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

UVa 1111 Generalized Matrioshkas 数据结构专题

 
阅读更多

FILE 11111-Generalized Matrioshkas 2642
34.25%
742
87.60%

题目链接接

http://uva.onlinejudge.org/index.phpoption=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=2052


题目类型: 数据结构, 链表



题目大意

这题的题意比较难懂,看了好几变才明白。 就是有一个可以嵌套娃娃的娃娃,然后嵌套在里面的娃娃又可以继续嵌套娃娃。

然后要求直接嵌套在里面(内一层)的娃娃的尺寸大小之和不能超过外面的。 例如,-3 -2 2 3,代表有两层,-3和3表示一个嵌套(这个娃娃的尺寸大小为3,且负数一定要在左边先出现),里面时-2和2表示一个大小2的娃娃。 再比如-5 -2 2 -1 1 5,表示有3个娃娃,5嵌套这2和1。当有更多层的嵌套时,如-9 -7 -22 -3 -2 -112379,表示9嵌套着7.然后7又嵌套着2(左边的-2,2)和3, 3又嵌套这2(右边出现的-2,2), 这个2又嵌套着1。 只要相邻的层次,内一层的大小相加起来小于(不能等于)外一层的大小就满足条件。


解题思路

这一题也和“括号嵌套”有点像。 首先是题目的输入,由于一开始没有采用一个好的输入方案,导致WA了无数次,浪费了几个小时。 然后题目需要注意的一些地方:1.如果娃娃个数是奇数,则直接判断错误; 2. 正数个数和负数不想等,也是错误的; 3.如果

正数先于对应的负数出现,也是错误的。


我采用的方法是,开一个数组level,用来保存各个层次娃娃的容量,然后每次遇到一个‘)’时就进行处理, 把当前这个层次的”外层“容量减去这个层次的大小。 当有个层次为0或负数时,则可以判断是错误的。最需要注意的是怎样处理和判断当前层次时哪一层。


样例输入

-9 -7 -2 2 -3 -2 -1 1 2 3 7 9
-9 -7 -2 2 -3 -1 -2 2 1 3 7 9
-9 -7 -2 2 -3 -1 -2 3 2 1 7 9
-100 -50 -6 6 50 100
-100 -50 -6 6 45 100
-10 -5 -2 2 5 -4 -3 3 4 10
-9 -5 -2 2 5 -4 -3 3 4 9


样例输出

:-) Matrioshka!
:-( Try again.
:-( Try again.
:-) Matrioshka!
:-( Try again.
:-) Matrioshka!
:-( Try again.

#include<cstdio>
#include<iostream>
#include<cstring>
#include<stack>
#include<cmath>
using namespace std;

string str;
int level[30000], arr[30000], numDoll, cntNeg, cntPos, n; 
stack<int>st;

bool solve(){
    if(numDoll%2==1 || cntNeg!=cntPos)
        return false;
    int i,j,index=0;
    if(numDoll==2){
        if(arr[0]<0 && arr[0]+arr[1]==0)
            return true;
        return false;
    }
    
    while(!st.empty()) 
        st.pop();

    for(i=0; i<numDoll; ++i){
        if(arr[i]<0){
            st.push(arr[i]);
            level[index++] = abs(arr[i]);
        }
        else if(arr[i]>0){
            if(st.empty() || abs(st.top()) != arr[i]) 
                 return false;
             
            if(st.size()==1){
                if(level[0] <=0 )
                    return false;
                st.pop();
            }
            else{
                st.pop();
                --index;   
                level[st.size()-1] -= arr[i];
                if( level[st.size()-1] <= 0 ){
                    return false;
                }                
            }           
        }
    }
    return true;
}

void input(){
    arr[0] = n;
    while(getchar()!='\n'){
        scanf("%d",&arr[numDoll++]);
    };   
}

int main()
{
    freopen("input.txt","r",stdin);

    bool flag=true;  
    cntNeg=0, cntPos=0;
    numDoll=1;
    while(~scanf("%d", &n)){  

        input();
        
        if(solve()) 
            printf(":-) Matrioshka!\n");
        else
            printf(":-( Try again.\n");
        
        cntNeg=0; 
        cntPos=0; 
        numDoll=1;
    }            
    return 0;
}


—— 生命的意义,在于赋予它意义。

原创http://blog.csdn.net/shuangde800By D_Double





分享到:
评论

相关推荐

    【精品课件】数据结构与算法 数据结构与C语言 data structure课程 第4章 串、数组和广义表(共66页).ppt

    3. **广义表(Generalized List)**:广义表是比数组更通用的数据结构,可以包含不同类型的数据,并且支持头尾操作。广义表的定义包括其基本元素(GetHead)和尾部子表(GetTail)。通过广义表,可以模拟许多复杂的...

    数据结构英文课件:Chap5 Array, Matrix and Generalized List.ppt

    在本课件“Chap5 Array, Matrix and Generalized List.ppt”中,主要探讨了数组、矩阵以及泛化的列表这三种重要的数据结构。 首先,数组是最基本的数据结构之一,每个元素在数组中都有一个对应的下标来标识其位置。...

    数据结构资料

    5. **ch05 Array&GL.ppt** - 数组是最基础的数据结构,而广义表(Generalized List)是数组的扩展。这个PPT可能介绍了数组的特性,如连续存储、下标访问,以及广义表的概念和操作。 6. **ch06 tree.ppt** - 树是一...

    数据结构广义表实现二叉树

    在计算机科学领域,数据结构是组织和存储数据的方式,它对于高效算法的设计至关重要。本话题聚焦于使用广义表来实现二叉树,这是一种独特且实用的方法。首先,我们需要理解广义表(Generalized List)和二叉树...

    学习-数据结构第四章习题解答

    在这个场景中,我们需要设计和实现一种数据结构来管理学生、课程和教师之间的关系,确保数据的高效存储和查询,同时满足广义线性表(Generalized Linear List)的算法特例。 **二、广义线性表基础** 广义线性表是一...

    心希盼 C++ 数据结构 广义表

    广义表(Generalized List)是一种灵活的数据结构,它可以表示各种不同类型的列表,包括线性表、链表、树等。与传统的数组或链表不同,广义表允许元素本身也是列表,这种特性使其具有强大的表达能力。在C++中,广义...

    数据结构广义表所有操作

    广义表(Generalized List)是数据结构中的一种重要形式,它是一种更通用的列表结构,可以表示各种复杂的数据组合。广义表不仅可以包含元素,还可以包含其他列表,这使得它能灵活地表达多层次的数据。 一、广义表的...

    数据结构之数组和广义表教程2.zip

    数据结构是计算机科学中的核心概念,它涉及到如何有效地组织、存储和检索数据,为算法设计提供了基础。数组和广义表是两种基本的数据结构,它们在处理和操作数据时各有特点和优势。在这个"数据结构之数组和广义表...

    数据结构1800试题

    - **多型数据类型的识别**:多型数据类型指的是能够包含多种不同数据类型的数据结构,例如广义表(Generalized List)。因此,选项B“广义表”是正确的答案。 ### 数据结构的基本概念 - **数据元素与记录**:数据元素...

    数据结构-第4章 串、数组和广义表.ppt

    在计算机科学中,数据结构是组织和管理数据的重要方式,它影响着算法的效率和程序的设计。本节我们将深入探讨三种基本的数据结构:串、数组和广义表。 首先,让我们来了解一下**串(String)**。串是由零个或多个字符...

    C++数据结构课程设计

    《C++数据结构课程设计深度解析》 C++数据结构课程设计是计算机科学与技术专业学生必经的一门重要实践课程。在这个过程中,学生需要掌握并应用数据结构的基本概念、算法及其C++实现,这对于提升编程能力和理解复杂...

    数据结构(c语言版).doc【精华】

    在这个【精华】文档中,我们主要关注的是使用C语言实现的数据结构——广义表(Generalized List)和二叉链表(Binary Link List)。以下是这些概念的详细说明: **广义表(Generalized List)** 广义表是一种可以...

    数据结构:广义表.ppt

    广义表(Generalized Lists)是数据结构的一种,它是线性表概念的扩展,允许包含单元素或嵌套的子表,使得它可以表示更复杂的数据结构。线性表的所有元素都是单一的数据项,而广义表则可以是单元素或另一个广义表,...

    数据结构实验:实现广义表抽象数据类型

    广义表(Generalized List)是一种非常重要的数据结构,它允许我们存储不同类型的数据,包括其他数据结构,如列表、元组等。本实验的目标是实现广义表的抽象数据类型(ADT),采用头尾链表和拓展性结构来设计。 ...

    数据结构教程 ppt

    数据结构是计算机科学中的核心课程,它探讨了如何在计算机中有效地组织和管理数据,以优化算法的性能。本教程的PPT课件涵盖了多个关键主题,旨在帮助学习者深入理解这一领域。以下是对每个部分的详细解释: 1. **栈...

    数据结构之栈、队列全部代码

    数据结构是计算机科学中的核心概念,它涉及到如何高效地存储和处理数据。在这个"数据结构之栈、队列全部代码"的压缩包中,我们将会深入探讨两种基本且重要的线性数据结构——栈和队列,以及它们在编程中的实际应用。...

    广义表数据结构ADT实现代码

    在数据结构领域,广义表是一种非常重要的数据结构,它可以用来表示具有层次关系的数据,如树、图等。下面将详细解释如何使用C语言实现广义表的ADT,并介绍相关的知识点。 首先,我们需要理解ADT的概念。抽象数据...

    数据结构试题文件,名校近年的考题

    广义表(Generalized List)则是一种更灵活的数据结构,它可以包含原子(单个元素)或子表(其他广义表)。试题中指出,广义表的表头是第一个元素,而表尾则是除了第一个元素之外的所有元素。取表尾运算不一定是原子...

    有关数据结构

    数据结构是计算机科学中的核心概念,它涉及到如何在内存中有效地组织和管理数据,以便进行高效的操作。在编程和算法设计中,理解并熟练运用数据结构至关重要。本资料包主要涵盖了五个基本的数据结构:栈、队列、数组...

    数据结构c设计性实验

    在本“数据结构C设计性实验”中,我们将重点关注一种特殊的抽象数据类型——广义表(Generalized List),它是数据结构中的重要概念之一。 广义表是一种灵活的数据结构,它可以表示具有不同数量和类型的元素的集合...

Global site tag (gtag.js) - Google Analytics