Tyvj的一个题,代码不知道哪里错了,求帮忙查看
这是 Tyvj 第四个题P1003(应该是第四个简单的
),就是得不到AC。我真心不知道哪里出错了,谁有耐心能帮忙看看,我的为什么错了,感激不尽!!
题目描述:
越野跑From huangrl
背景 Background
成成第一次模拟赛 第二道
描述 Description
为了能在下一次跑步比赛中有好的发挥,贝茜在一条山路上开始了她的训练
。贝茜希望能在每次训练中跑得尽可能远,不过她也知道农场中的一条规定:
奶牛独自进山的时间不得超过M秒(1 <= M <= 10,000,000)。
整条山路被贝茜划分成T个长度相同的小段(1 <= T <= 100,000),并且,
贝茜用S_i表示第i个小段的路况。S_i为u,f,d这3个字母之一,它们分别表示
第i个小段是上坡、平地,或是下坡。
贝茜要花U秒(1 <= U <= 100)才能跑完一段上坡路,跑完一段平地的耗时是
F秒(1 <= F <= 100),跑完一段下坡路要花D秒(1 <= D <= 100)。注意,沿山路
原路返回的时候,原本是上坡路的路段变成了下坡路,原本是下坡路的路段变成
了上坡路。
贝茜想知道,在能按时返回农场的前提下,她最多能在这条山路上跑多远。
输入格式 InputFormat
输入格式:
* 第1行: 5个用空格隔开的整数:M,T,U,F,以及D
* 第2..T+1行: 第i+1行为1个字母S_i,描述了第i段山路的路况
输出格式 OutputFormat
输出格式:
* 第1行: 输出1个整数,为贝茜在按时回到农场的前提下,最多能跑到多远
样例输入 SampleInput [复制数据]
13 5 3 2 1
u
f
u
d
f
样例输出 SampleOutput [复制数据]
3
数据范围和注释 Hint
输入说明:
贝茜跑步的最大耗时为13秒(这么短...),她跑步的山路一共被划成5段。
贝茜跑完一段上坡路的耗时为3秒,平地为2秒,下坡路为1秒。山路各段的走向
如下图所示:
_/\_
/
输出说明:
贝茜跑完山路的前3段,然后返回,总耗时为3 + 2 + 3 + 1 + 2 + 1 = 12秒,
只比她能在外面呆的时限少1秒。如果她跑得更远,就无法按时回到农场。
这是第一次代码:
程序代码:#include<stdio.h>
int main(void)
{
int M, T, U, F, D;
char ch;
int i;
int flag;
int maxi;
int s;
s = 0;
flag = 1;
scanf("%d%d%d%d%d", &M, &T, &U, &F, &D);
for (i = 1; i <= T; i++)
{
getchar();
ch = getchar();
if ((ch == 'u') || (ch == 'd'))
{
s += U + D;
}
else
{
s += 2 * F;
}
if (flag)
{
if (s <= M)
{
maxi = i;
}
else
{
flag = 0;
}
}
}
printf("%d", maxi);
return(0);
}
只得到20分:
测试数据 #1: Accepted, time=0ms, mem=636KB, score=10
测试数据 #2: Wrong Answer, time=0ms, mem=640KB, score=0
测试数据 #3: Wrong Answer, time=0ms, mem=640KB, score=0
测试数据 #4: Wrong Answer, time=0ms, mem=636KB, score=0
测试数据 #5: Wrong Answer, time=0ms, mem=640KB, score=0
测试数据 #6: Accepted, time=0ms, mem=636KB, score=10
测试数据 #7: Wrong Answer, time=0ms, mem=636KB, score=0
测试数据 #8: Wrong Answer, time=0ms, mem=640KB, score=0
测试数据 #9: Wrong Answer, time=0ms, mem=636KB, score=0
测试数据 #10: Wrong Answer, time=0ms, mem=636KB, score=0
Time = 0ms Mem = 640KB Score= 20
改了一下,换了个思路,第二次代码:
程序代码:#include<stdio.h>
#include<malloc.h>
int main(void)
{
int M, T, U, F, D;
char *p1 = NULL;
int *p2 = NULL;
int i;
int s = 0;
scanf("%d%d%d%d%d", &M, &T, &U, &F, &D);
p1 = (char *)malloc(T * sizeof (char));
p2 = (int *)malloc(T * sizeof (int));
for (i = 0; i < T; i++)
{
getchar();
*(p1 + i) = getchar();
if (*(p1 + i) == 'f')
{
s += 2 * F;
}
else
{
s += U + D;
}
*(p2 + i) = s;
}
for (i = 1; (i < T) && (*(p2 + i -1) <= M); i++)
{}
i--;
printf("%d", i);
free(p1);
free(p2);
return(0);
}
这次好点,50分:
测试数据 #1: Accepted, time=0ms, mem=636KB, score=10
测试数据 #2: Accepted, time=0ms, mem=640KB, score=10
测试数据 #3: Wrong Answer, time=0ms, mem=636KB, score=0
测试数据 #4: Accepted, time=0ms, mem=640KB, score=10
测试数据 #5: Accepted, time=0ms, mem=640KB, score=10
测试数据 #6: Accepted, time=0ms, mem=640KB, score=10
测试数据 #7: Wrong Answer, time=0ms, mem=640KB, score=0
测试数据 #8: Wrong Answer, time=0ms, mem=640KB, score=0
测试数据 #9: Wrong Answer, time=0ms, mem=640KB, score=0
测试数据 #10: Wrong Answer, time=0ms, mem=640KB, score=0
Time = 0ms Mem = 640KB Score= 50
谁有耐心能帮忙查看下,为什么错了,感激不尽!











