鱼C论坛

 找回密码
 立即注册
查看: 1689|回复: 4

[已解决]九度1334 一直wa

[复制链接]
发表于 2017-2-23 21:42:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

int no[10002][2];//mark[i][0],mark[i][1]表示i编号同学占座的起始号和结束号 
bool mark[10002];//标记座位是否被占 
char op[2][5] = 
{
        "in",
        "out"
};
char str[5];
int main()
{
        int n,m;
        while(scanf("%d%d",&n,&m) != EOF)
        {//n * n个座位,m个人 
                for(int i = 0; i < n * n; i++)
                {
                        no[i][0] = 0;
                        no[i][1] = 0;
                        mark[i] = 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[0],str) == 0)
                        {//命令为占座 
                                scanf("%d %d",&id,&num);
                                if(no[id][0] == 0 && no[id][1] == 0 && num <= count)
                                {//未申请过,可以申请 
                                        for(int i = 0; i < n * n; i++)
                                        {//遍历座位 
                                                int j = 0;
                                                while(mark[i + j] == false && i + j < n * n)
                                                {//找到第一个未被占的座位 
                                                        j++;
                                                        if(j == num)
                                                        {//找到 
                                                                count = count - num;
                                                                no[id][0] = i;
                                                                no[id][1] = i + num - 1;//标记占座的起始地址和结束地址 
                                                                for(int j = 0; j < num;j++)
                                                                {
                                                                        mark[i + j] = true;//标记为已占座 
                                                                }
                                                                ans = true;
                                                                break;
                                                        }
                                                } 
                                                if(ans)
                                                {//找到,跳出循环 
                                                        break;
                                                }
                                        }
                                }
                                if(ans)
                                {
                                        printf("yes\n")        ;
                                }
                                else
                                {
                                        printf("no\n");
                                }
                        }
                        if(strcmp(op[1],str) == 0)
                        {//释放座位 
                                scanf("%d",&id);
                                if(no[id][0] != 0 || no[id][1] != 0)
                                {//之前占座了 
                                        for(int i = no[id][0]; i <= no[id][1]; i++)
                                        {
                                                mark[i] = false;//标记为未占座 
                                        }
                                        count = no[id][1] - no[id][0] + 1 + count;
                                        no[id][0] = 0;
                                        no[id][1] = 0;
                                }
                        }
                }
        }
        return 0;
}
最佳答案
2017-3-7 15:14:22
先说我没搞好
不过看了你的思路,是不是因为输入格式不对。按你的思路在输入in 和 out 之后,要进行判断在进行输入那样需要一个回车的吧。如果oj 是 in 1 7 中间是空格输入是不是 oj判断就是错的了。我觉得换个方式比较好 这一条指令作为一个字符串数组, 在判断in out 进行后续操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-7 00:41:03 | 显示全部楼层
具体实现还在看 但发现一个错误
scanf("%d%d",&n,&m) 这一句这样怎么输入数字呢 两个%d中间没有间隔或者符号,你输入123的话你是想表达第一个数字是1还是12还是123呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

还没看题,不过这样的表达方式,空格和回车是都可以的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-7 15:14:22 | 显示全部楼层    本楼为最佳答案   
先说我没搞好
不过看了你的思路,是不是因为输入格式不对。按你的思路在输入in 和 out 之后,要进行判断在进行输入那样需要一个回车的吧。如果oj 是 in 1 7 中间是空格输入是不是 oj判断就是错的了。我觉得换个方式比较好 这一条指令作为一个字符串数组, 在判断in out 进行后续操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-8 11:26:05 | 显示全部楼层
0mrli0 发表于 2017-3-7 11:54
还没看题,不过这样的表达方式,空格和回车是都可以的

好吧 我表示抱歉- -太久没用scanf了 基础东西有点忘了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 00:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表