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
谁有耐心能帮忙查看下,为什么错了,感激不尽!