测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A52049. 啤酒厂选址

填空题 中等

题目描述

啤酒厂选址

题目描述

    海上有一个岛,在环海边上建有一条环岛高速公路,沿着公路有n(5 < n < 10000)个居民点,假设每个居民点有一个编号,从0开始,按顺时针依次从小到大(即,0,1,…,n-1)编号。在岛上啤酒很受青睐。某啤酒企业计划在岛上投资建一个啤酒厂,并根据啤酒需求每天向居住点送啤酒。已知两个相邻的居民点的距离以及每个居住点每天的啤酒需求量(假设每个居住点每天不超过2000桶)。假定每单位长度的路程送一桶啤酒需要的费用恒定(为单位费用)。请问,选择哪一个居民点建啤酒厂,才能使每天送啤酒的费用最小(空车不计费用)。

输入

    输入第一行:为居民点数目n

    后面为n行,每行为一个居民点的啤酒需求量以及按顺时针离下一个居民点的距离(均为整数,空格间隔),从编号为0的开始,按单增顺次给出。

    注意:后面第n行对应于居民点(n-1)的啤酒需求量以及到编号为0的居民点距离。输出啤酒厂所在的居民点编号以及每天的运输费用,其间以逗号间隔

输出

    输出啤酒厂所在的居民点编号以及每天的运输费用,其间以逗号间隔

输入

6

500 10

300 30

350 25

400 60

700 28

200 35

输出

0,94100


参考答案

#include <iostream> #include <stdio.h> #include <cstring> int i; #define A 9999 int main() { using namespace std; char ch[A]; gets(ch); int len=strlen(ch); int max_len=0,min_len=9999,sum=0; int positionmin,positionmax; ch[len]=' '; //避免内存偶然性(万一ch[len]处也是字母就麻烦了) for(i=0; i<len; i++) { if(ch[i]!=' '&&ch[i]!=',') { sum++; } else if(sum>0) { //这个显得有点重要 if(sum<min_len) { min_len=sum; positionmin=i-min_len; } if(sum>max_len) { max_len=sum; positionmax=i-max_len; } sum=0; } } for(i=positionmax; i<positionmax+max_len; i++) cout<<ch[i]; cout<<endl; for(i=positionmin; i<positionmin+min_len; i++) cout<<ch[i]; cout<<endl; return 0; }

答案解析

暂时没有更好的方法,一个一个的遍历吧


注意,反向距离可以用总距离减去正向距离得到

上一题 下一题