关注
第一题:
#include <iostream>
#include <vector>
using namespace std;
int numOfplan();
int main()
{
cout << numOfplan() << endl;
return 0;
}
int numOfplan()
{
int n;
cin >> n;
vector<int> arr(n);
int sum = 0;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
sum += arr[i];
}
if (sum % arr.size() != 0)
return -1;
int avg = sum / arr.size();
int iCount = 0;
for (unsigned int i = 0; i < arr.size(); i++)
{
if ((arr[i] - avg) % 2 == 0)
iCount += (arr[i] - avg) > 0 ? (arr[i] - avg) / 2 : (avg - arr[i]) / 2;
else
return -1;
}
return iCount & 1 ? -1 : iCount / 2;
}
第二题:
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
long long _maxWastage1(long long h); // 方法1
long long _maxWastage2(long long h); // 方法2
int main()
{
// 由于 10^18 在 long long 的表示范围内
long long h;
cin >> h;
cout << _maxWastage2(h) << endl;
return 0;
}
long long _maxWastage1(long long h)
{
long long result = sqrt(h);
for (long long i = result - 1; i >= 0; i--)
{
if (i + i * i < h)
return i;
}
return 0;
}
long long _maxWastage2(long long h)
{
long long left = 0;
long long right = h;
long long mid = 0;
while (left < right)
{
mid = (right + left + 1) >> 1;
if (mid + mid * mid > h)
right = mid - 1;
else
left = mid;
}
return left;
}
第三题:
#include <iostream>
using namespace std;
bool is_ok_(int _m);
bool is_ok(int l, int r, int _m);
#define MAXN (500+10)
#define MAXM (500+10)
#define MAXT (2000000+10)
int a[MAXN][MAXM], sum[MAXN][MAXM] = { 0 };
int n, m;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> a[i][j];
sum[i][j] = sum[i - 1][j] + a[i][j];
}
}
int left = 1, right = 1, ans = 0;
for (int j = 1; j <= m; j++)
right += sum[n][j];
for (int i = 1; i <= 60; i++)
{
int mid = (left + right) / 2;
if (is_ok_(mid))
{
left = ans = mid;
}
else
right = mid;
}
cout << ans << endl;
return 0;
}
bool is_ok_(int _m)
{
int p = 0, l = 1;
for (int i = 1; i <= n; i++)
{
if (is_ok(l, i, _m))
{
l = i + 1; p++;
}
}
if (p >= 4)
return 1;
else
return 0;
}
bool is_ok(int l, int r, int _m)
{
int tot = 0, p = 0;
for (int i = 1; i <= m; i++)
{
tot += sum[r][i] - sum[l - 1][i];
if (tot >= _m)
{
tot = 0;
p++;
}
}
if (p >= 4)
return 1;
else
return 0;
}
查看原帖
点赞 8
相关推荐
08-12 09:16
Java 

点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 一觉醒来,穿越回国庆前 #
9550次浏览 50人参与
# 你找工作的时候用AI吗? #
149414次浏览 815人参与
# 深信服秋招来了 #
274934次浏览 2908人参与
# 国庆后,我的返工状态 #
2291次浏览 17人参与
# 央国企投递记录 #
113858次浏览 1462人参与
# 机械制造公司评价 #
143268次浏览 329人参与
# 薪资爆料 #
156469次浏览 1314人参与
# 通信/硬件公司求职体验 #
147331次浏览 965人参与
# 面试等了一周没回复,还有戏吗 #
155225次浏览 1309人参与
# 找工作有哪些冷知识 #
147895次浏览 2365人参与
# 巨人网络求职进展汇总 #
131427次浏览 912人参与
# 如果没找到工作,考公是你的退路吗 #
52471次浏览 414人参与
# 毕业季,给职场新人一些建议 #
131774次浏览 2160人参与
# 通信硬件2024笔试面试经验 #
241193次浏览 2001人参与
# 机械人求职现状 #
26048次浏览 276人参与
# 生化医药面经大本营 #
135320次浏览 515人参与
# 通信/硬件求职避坑tips #
98443次浏览 957人参与
# 参加过提前批的机械人,你们还参加秋招么 #
96085次浏览 1563人参与
# 26届秋招投递记录 #
35452次浏览 420人参与
# 第一次面试 #
989606次浏览 13570人参与
# 满帮集团求职进展汇总 #
5104次浏览 61人参与