赛码网算法练习(三)
这个题目就是判断有累计一共有多少个N,即把所有的距离依次相加,超过N的时候重新技术就行了,但是不知道为什么我的答案就是不行,大神们可以帮我参考一下。
最新答案:
最近重新调试了这个题目,发现思路没有问题,只是题目中估计是只需要到达最后一个村庄就行,而不是到达终点,即把代码中的for循环从0到n+1,改成从0到n即可。我不知道这么理解对不对,但是这么改完代码ac,不知道是否有别的理解,下面给出ac的Python代码。
#!/usr/bin/env python # coding=utf-8 while 1: li = raw_input(); if li: m,n = map(int,li.split()) #print E,n #E 能量 n 村庄个数 li2=raw_input() road=map(int,li2.split()) if max(road)>m: print 0;break cnt=0 E=m for i in xrange(0,n): print i if E>=road[i]: E = E-road[i] else: cnt=cnt+1 E=m-road[i] print cnt else: break
题目网址:http://exercise.acmcoder.com/online/online_judge_ques?ques_id=2267&konwledgeId=139
#include"stdafx.h" #include<stdio.h> #include <iostream> using namespace std; int main() { int N, n; int *road; while (cin >> N >> n){ //输入所有信息 road 保存路程的距离 road = new int[n + 1]; for (int i = 0; i < n + 1; i++){ scanf("%d", &road[i]); } //设定补给次数技术cnt int cnt = 0; int energy = N;//energy 表示当前的能量值,从第一个村庄开始走 for (int k = 0; k < n; k++){ if (road[0]>N) return 0; //如果当前能量值减去到达当前村庄后的能量不足以到达下一村庄,那么补充能量,计数加1,否则减去到达当前村庄的能量即可 if (energy - road[k] < road[k + 1]){ cnt++; energy = N; } else energy = energy - road[k]; } printf("%d\n", cnt); } }