九度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;
} 具体实现还在看 但发现一个错误
scanf("%d%d",&n,&m) 这一句这样怎么输入数字呢 两个%d中间没有间隔或者符号,你输入123的话你是想表达第一个数字是1还是12还是123呢 lumber2388779 发表于 2017-3-7 00:41
具体实现还在看 但发现一个错误
scanf("%d%d",&n,&m) 这一句这样怎么输入数字呢 两个%d中间没有间隔或者 ...
还没看题,不过这样的表达方式,空格和回车是都可以的 先说我没搞好{:10_269:}
不过看了你的思路,是不是因为输入格式不对。按你的思路在输入in 和 out 之后,要进行判断在进行输入那样需要一个回车的吧。如果oj 是 in 1 7 中间是空格输入是不是 oj判断就是错的了。我觉得换个方式比较好 这一条指令作为一个字符串数组, 在判断in out 进行后续操作 0mrli0 发表于 2017-3-7 11:54
还没看题,不过这样的表达方式,空格和回车是都可以的
好吧 我表示抱歉- -太久没用scanf了 基础东西有点忘了
页:
[1]