Problem
题目简述
现有 \(n\) 个已经加过油的加油站,如果当前剩余油量 \(< 10\) 升,则会加 \(x\) 升的油。
初始状态下,有 \(x\) 升油。每个加油站之间的距离为 \(100\) 米,耗油量为 \(10\) 升。
思路
首先,从左向右求出能到达的编号最小的车站,记为 \(mi\) ,然后在从右向左求出能到的的编号最大的车站,记为 \(ma\) 。
初始化:
mi = a[1];ma = a[1] + 1;
向下取整
Min = floor(mi); Max = floor(ma);
注意特判!!!
if(ma == Max) Max--;
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int n;
int a[N];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
double mi = a[1], ma = a[1] + 1;
for(int i = 2; i <= n; i++) {
mi = max(mi, a[i] * 1.0 / i);
ma = min(ma, (a[i] + 1) * 1.0 / i);
}
mi *= (n + 1), ma *= (n + 1);
int Min = int(mi), Max = int(ma);
if (ma == Max) Max--;
if (Max != Min) {
printf("not unique");
return 0;
}
printf("unique\n%d",Max);
return 0;
}