这道题也是没能全过,没过的测试点都显示超时了。按我现在的水平还找不出哪里可以优化的,看了题解很多都是用了C++的库,就先挂着吧。给学了C没学C++的人参考一下,也希望大佬能够赐教。


上代码
#include<stdio.h>
#include<stdlib.h>
structjs
{
intd,j,t;
};
intmain()
{
intn,m;
int* r;
structjs* jie;
scanf("%d %d", &n,&m);
r=malloc(sizeof(int)*n);
jie=malloc(sizeof(structjs)*m);
for(inti=0;i<n;i++)
{
scanf("%d",&r[i]);
}
for(inti=0;i<m;i++)
{
scanf("%d %d %d",&jie[i].d,&jie[i].j,&jie[i].t);//d 借用教室数 j借用起始日 t借用截止日
for(intj=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);
return0;
}
}
}
printf("0");
return0;
}
这道题里有个很容易粗心的点,就是可借教室的数组(即r[j-1])那个地方注意要-1才能对应上数组从零开始的计数法则。还有本体中我用了一个双出口的写法(即return 0)让循环次数减少,这里也可以用goto。
该篇文章是一个关于C语言编程的讨论,作者在解决一个题目时遇到超时问题,主要涉及数组操作和内存分配。题目要求处理教室借用情况,作者通过动态调整数组r表示可借用教室状态,但遇到了效率问题。题解中提到许多优化方法使用了C++库。作者提示注意数组索引和提供了一个双出口的循环优化策略。
412

被折叠的 条评论
为什么被折叠?



