A N e w G a m e

A   N e w  G a m e

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

今年集训队有一个RE大神,他特别喜欢RE。当然不只是Runtime Error,还有R和E两个字母,只要和这两个字母有关系的他基本上都喜欢。
所以今天出题的Administrator就制造了这样一种游戏。首先会有n张卡片给出,每张卡片上有一个数。依次将这n张卡片放在一个盘子上,下面的卡片会覆盖上面的卡片。然后会有m个操作,分为两种:
1、 R:这种操作是将新的一张带有数字的卡片放到最上面那张卡片的上面。当然如果一张卡片都没有,它就是第一个。然后输出它下面两张卡片上的数之和。如果它下面卡片个数小于二,有一个输出一个,没有就输出“NONE”。
2、 E:这种操作是将最上面的卡片扔掉,然后输出最上面卡片上的数字与最下面卡片上的数字之差的绝对值。如果删掉后没有数字就输出“NONE”。如果当要删掉卡片时没有卡片则输出“Runtime Error”。
请帮RE大神完成输入数据给出的操作。

输入

 输入有多组。每一组第一行为n。第二行为n个数。第三行为m,然后有m行,每行是一个操作。所有数均为正整数且小于10000。

输出

 输出m行每行一个数。输出要输出的数。

示例输入

3
1 2 3
8
R 4
E
E
E
E
E
R 10
R 10

示例输出

5
2
1
0
NONE
Runtime Error
NONE
10
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct node
{
    int data;
    struct node *next;
};
int main()
{
    int n,i;
    char c;
    struct node *head,*p,*r;
    while(~scanf("%d",&n))
    {
        head=(struct node*)malloc(sizeof(struct node));
        head->next=NULL;
        for(i=0;i<n;i++)
        {
            p=(struct node*)malloc(sizeof(struct node));
            scanf("%d",&p->data);
            p->next=head->next;
            head->next=p;
        }
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            getchar();
            scanf("%c",&c);
            if(c=='R')
            {
                p=(struct node*)malloc(sizeof(struct node));
                scanf("%d",&p->data);
                p->next=head->next;
                head->next=p;
                if(p->next==NULL)
                    printf("NONE\n");
                else if(p->next->next==NULL)
                    printf("%d\n",p->next->data);
                else printf("%d\n",p->next->data+p->next->next->data);
            }
            else if(c=='E')
            {
                if(head->next==NULL)
                    printf("Runtime Error\n");
                else if(head->next->next==NULL)
                {
                    printf("NONE\n");
                    r=head->next;
                    head->next=NULL;
                    free(r);
                }
                else if(head->next->next->next==NULL)
                {
                    printf("0\n");
                    r=head->next;
                    head->next=r->next;
                    free(r);
                }
                else
                {
                    r=head->next;
                    head->next=r->next;
                    free(r);
                    for(p=head->next;p->next;p=p->next);
                    printf("%d\n",abs(head->next->data-p->data));
                }
            }
        }
        while(head->next)
        {
            r=head->next;
            head->next=r->next;
            free(r);
        }
        free(head);
    }
    return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值