uva 11111 Generalized Matrioshkas

大意是:判断一个玩具内能否容下其它小玩具,当且仅当其它玩具尺寸之和小于外层玩具时输出Matrioshka

//1Y的代码,很好,其实就是模拟一下,注意一下细节

 

#include <stdio.h>

#include <string.h>

#define MAX 10010

struct node

{ int size,volume;};

struct node a[MAX],temp[MAX];

int n,top,outside;

int JUDGE()

{

    int i;

    memset(a , 0 ,sizeof(a));

 // printf("test a volume\n");for(i=0; i<n; i++) printf("%d ",a[i].volume);  printf("\n");

    outside=-1; top=0;

    for(i=0; i<n; i++)

    {

        if(temp[i].size<0) 

        {

            a[top].size=temp[i].size;   top++; 

            if(outside>=0) 

            { 

                a[outside].volume+=(0-temp[i].size);

                if(a[outside].volume>=(0-a[outside].size))  return 0;

            }

            outside++;  a[outside].volume=0;

        }

        else  // temp[i].size>0

        {

            a[top].size=temp[i].size;

            if( (a[top].size+a[top-1].size) )   return 0;

            else  //说明配对成功

            {  top--;  outside--;  }

        }



    }

    if(top<=0)  return 1;

    else        return 0; 

}

int main()

{

    int i;  int end;  char ch;

    while(1)

    {

        i=end=0;

        while(1)

        {

            if(scanf("%d",&temp[i].size)==EOF) {end=1; break;} i++;

            ch=getchar();  if(ch=='\n')  break;

        }

        if(end) return 0;

        n=i; //for(i=0; i<n; i++)  printf("%d ",temp[i].size);  printf("\n");

        if(JUDGE())  printf(":-) Matrioshka!\n");

        else         printf(":-( Try again.\n");

    }

    return 0;

}

 

 

 

 

你可能感兴趣的:(ios)