关注
第一题:
#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
相关推荐
10-15 16:40
河南科技大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作能把i人逼成什么样 #
15082次浏览 176人参与
# 上班到公司第一件事做什么? #
109811次浏览 745人参与
# 你今年做了几份实习? #
10126次浏览 151人参与
# 工作两年想退休了 #
203862次浏览 1804人参与
# 一上班就想____,这正常吗? #
5675次浏览 98人参与
# 大厂面试初体验 #
83733次浏览 385人参与
# 大学最后一个寒假,我想…… #
72343次浏览 727人参与
# 大家每天通勤多久? #
64577次浏览 415人参与
# 面试尴尬现场 #
205634次浏览 822人参与
# 运营面经 #
146147次浏览 1322人参与
# 什么样的公司千万别去 #
28186次浏览 149人参与
# 第一份工作应该选高薪还是热爱? #
141322次浏览 1050人参与
# 0经验如何找实习? #
27419次浏览 459人参与
# 你找工作的时候用AI吗? #
163266次浏览 857人参与
# 学历对求职的影响 #
572625次浏览 3971人参与
# 一起聊华为 #
168750次浏览 820人参与
# 字节出了豆包coding模型 #
6912次浏览 61人参与
# 如果公司降薪,你会跳槽吗? #
111042次浏览 711人参与
# 25年找工作是什么难度? #
16763次浏览 168人参与
# 一人推荐一个值得去的通信/硬件公司 #
228045次浏览 2067人参与