smgp 发表于 2017-2-23 21:42:46

九度1334 一直wa

http://ac.jobdu.com/problem.php?pid=1334
这是题目,大致就是n * n个座位,一个人去占座,占过释放前不能再占,必须占连续的座位,
这是我写的代码,我自己运行感觉挺对的,但是一直都是wa。求帮助!!!
#include <stdio.h>
#include <string.h>

int no;//mark,mark表示i编号同学占座的起始号和结束号
bool mark;//标记座位是否被占
char op =
{
        "in",
        "out"
};
char str;
int main()
{
        int n,m;
        while(scanf("%d%d",&n,&m) != EOF)
        {//n * n个座位,m个人
                for(int i = 0; i < n * n; i++)
                {
                        no = 0;
                        no = 0;
                        mark = false;
                }
                int id,num;//学生编号和要占的座位数
                int k;
                int count = n * n;//表示可用的座位
                scanf("%d",&k);//k条指令
                for (int i1 = 0; i1 < k; i1++)
                {//k条指令
                        bool ans = false;//命令有效初始为否
                        scanf("%s",str);
                        if(strcmp(op,str) == 0)
                        {//命令为占座
                                scanf("%d %d",&id,&num);
                                if(no == 0 && no == 0 && num <= count)
                                {//未申请过,可以申请
                                        for(int i = 0; i < n * n; i++)
                                        {//遍历座位
                                                int j = 0;
                                                while(mark == false && i + j < n * n)
                                                {//找到第一个未被占的座位
                                                        j++;
                                                        if(j == num)
                                                        {//找到
                                                                count = count - num;
                                                                no = i;
                                                                no = i + num - 1;//标记占座的起始地址和结束地址
                                                                for(int j = 0; j < num;j++)
                                                                {
                                                                        mark = true;//标记为已占座
                                                                }
                                                                ans = true;
                                                                break;
                                                        }
                                                }
                                                if(ans)
                                                {//找到,跳出循环
                                                        break;
                                                }
                                        }
                                }
                                if(ans)
                                {
                                        printf("yes\n")        ;
                                }
                                else
                                {
                                        printf("no\n");
                                }
                        }
                        if(strcmp(op,str) == 0)
                        {//释放座位
                                scanf("%d",&id);
                                if(no != 0 || no != 0)
                                {//之前占座了
                                        for(int i = no; i <= no; i++)
                                        {
                                                mark = false;//标记为未占座
                                        }
                                        count = no - no + 1 + count;
                                        no = 0;
                                        no = 0;
                                }
                        }
                }
        }
        return 0;
}

lumber2388779 发表于 2017-3-7 00:41:03

具体实现还在看 但发现一个错误
scanf("%d%d",&n,&m) 这一句这样怎么输入数字呢 两个%d中间没有间隔或者符号,你输入123的话你是想表达第一个数字是1还是12还是123呢

0mrli0 发表于 2017-3-7 11:54:07

lumber2388779 发表于 2017-3-7 00:41
具体实现还在看 但发现一个错误
scanf("%d%d",&n,&m) 这一句这样怎么输入数字呢 两个%d中间没有间隔或者 ...

还没看题,不过这样的表达方式,空格和回车是都可以的

0mrli0 发表于 2017-3-7 15:14:22

先说我没搞好{:10_269:}
不过看了你的思路,是不是因为输入格式不对。按你的思路在输入in 和 out 之后,要进行判断在进行输入那样需要一个回车的吧。如果oj 是 in 1 7 中间是空格输入是不是 oj判断就是错的了。我觉得换个方式比较好 这一条指令作为一个字符串数组, 在判断in out 进行后续操作

lumber2388779 发表于 2017-3-8 11:26:05

0mrli0 发表于 2017-3-7 11:54
还没看题,不过这样的表达方式,空格和回车是都可以的

好吧 我表示抱歉- -太久没用scanf了 基础东西有点忘了
页: [1]
查看完整版本: 九度1334 一直wa