这道题也是没能全过,没过的测试点都显示超时了。按我现在的水平还找不出哪里可以优化的,看了题解很多都是用了C++的库,就先挂着吧。给学了C没学C++的人参考一下,也希望大佬能够赐教。
上代码
#include<stdio.h>
#include<stdlib.h>
struct
js
{
int
d,j,t;
};
int
main()
{
int
n,m;
int
* r;
struct
js* jie;
scanf
(
"%d %d"
, &n,&m);
r=
malloc
(
sizeof
(
int
)*n);
jie=
malloc
(
sizeof
(
struct
js)*m);
for
(
int
i=0;i<n;i++)
{
scanf
(
"%d"
,&r[i]);
}
for
(
int
i=0;i<m;i++)
{
scanf
(
"%d %d %d"
,&jie[i].d,&jie[i].j,&jie[i].t);
//d 借用教室数 j借用起始日 t借用截止日
for
(
int
j=jie[i].j;j<=jie[i].t ;j++)
//j用于控制所要借的天数的可借用教室
{
if
(r[j-1]>=jie[i].d)//注意这个r[j-1],否则会对应错
{
r[j-1]-=jie[i].d;
}
else
{
printf
(
"-1\n"
);
printf
(
"%d"
,i+1);
return
0;
}
}
}
printf
(
"0"
);
return
0;
}
这道题里有个很容易粗心的点,就是可借教室的数组(即r[j-1])那个地方注意要-1才能对应上数组从零开始的计数法则。还有本体中我用了一个双出口的写法(即return 0)让循环次数减少,这里也可以用goto。