啤酒厂选址 c++

编程入门 行业动态 更新时间:2024-10-10 02:14:40

<a href=https://www.elefans.com/category/jswz/34/885420.html style=啤酒厂选址 c++"/>

啤酒厂选址 c++

描述
海上有一个岛,在环海边上建有一条环岛高速公路,沿着公路有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
AC code:

#include<set>
#include<map>
#include<stack>
#include<queue>
#include<math.h>
#include<stdio.h>
#include<limits.h>
#include<iostream>
#include<algorithm>
#define int long long
#pragma GCC optimize(2)
#define N 10005inline int read(void){int x=0,f=1;char c=getchar();while(c<'0' || c>'9'){if(c == '-') f=-1;c=getchar();}while(c>='0' && c<='9') x=x*10+c-'0',c=getchar();return x*f;
}inline void write(int x) {if(x<0) putchar('-'),x=-x;if(x>9) write(x/10);putchar(x%10+'0');return;
}class node{
private:int num[N],dis[N],n;long long dis2,dis3 ;long long sum,min1=LONG_LONG_MAX,money,x;
public:explicit node(int K){ dis2 = K, dis3 = K,sum = K,money = K;return; }inline void get_num(void){scanf("%d",&n);for(register int i=0; i<n; i++){scanf("%lld%lld",&num[i],&dis[i]);sum += dis[i];}if(Special_judgment()) exit(0);//put_num();_start();}/*inline void put_num(void){for(register int i=0; i<n; i++){std::cout << "num =" << num[i] << " ";std::cout << "dis= " << dis[i] << std::endl;}}inline bool check(int P){if(P == n) std::cout << "true!" << std::endl;else std::cout << "False" << std::endl;}*/inline void _start(void){//check(n); for(int i=0; i<n-1; i++){for(int j=0; j<n; j++){dis2 += dis[(j+i)%n];if(sum/2 < dis2) dis3=(sum-dis2);	else dis3 = dis2;money += dis3 * num[(j+i+1)%n];}if (min1 > money) {min1 = money;x = i;}money=0;dis2=0;}write_num(x,min1);}/*inline void put_money(void){std::cout << "min1 = " << min1 << " ";std::cout << "money = " << money << std::endl;return;}*/inline void write_num(register int A, register int B){//std::cout << A << "," << B << std::endl;printf("%lld,%lld",A,B);return;}
};signed main(void){node A_(0);A_.get_num();return 0;
}

更多推荐

啤酒厂选址 c++

本文发布于:2024-03-05 11:58:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1712238.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:啤酒厂

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!