解题思路:
二分答案
注意事项:
int会爆
参考代码:
#include<iostream> #include<vector> using namespace std; typedef long long ll; vector<ll> v; ll sum[300010]; ll a, b, c, n; bool check(ll mid) { ll l = 1; ll r = mid; while (r < v.size()) { if (sum[r] - sum[l - 1] > a * (b * r - c * l)) { return true; } l++; r++; } return false; } int main() { //int n, a, b, c; cin >> n >> a >> b >> c; v.push_back(0); for (int i = 0;i < n;i++) { ll num; cin >> num; v.push_back(num); } for (int i = 1;i <= n;i++) { sum[i] = sum[i - 1] + v[i]; } int l = 0; int r = n+1; while (l<r) { int mid = (l + r) / 2; if (check(mid) == false) { r = mid; } else { l = mid + 1; } } if (l != 0) { cout << l - 1; } else { cout << "0"; } return 0; }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复