mirror of
https://github.com/wczffl-503/OI-Codes.git
synced 2025-07-08 02:13:51 +08:00
Add FZOI Codes
This commit is contained in:
66
FZOI/复制书稿.cpp
Normal file
66
FZOI/复制书稿.cpp
Normal file
@ -0,0 +1,66 @@
|
||||
#include <bits/stdc++.h>
|
||||
#define int long long
|
||||
using namespace std;
|
||||
|
||||
int n, m;
|
||||
int a[505];
|
||||
int x[505], y[505];
|
||||
|
||||
bool check(int s)
|
||||
{
|
||||
int num = 1, t = 0;
|
||||
for (int i = n; i >= 1; i--)
|
||||
{
|
||||
if (t + a[i] > s)
|
||||
t = 0, num++;
|
||||
t += a[i];
|
||||
}
|
||||
return num <= m;
|
||||
}
|
||||
|
||||
int find(int low, int high)
|
||||
{
|
||||
int mid;
|
||||
while (low + 1 < high)
|
||||
{
|
||||
mid = low + (high - low) / 2;
|
||||
if (check(mid))
|
||||
high = mid;
|
||||
else
|
||||
low = mid;
|
||||
}
|
||||
return high;
|
||||
}
|
||||
|
||||
signed main()
|
||||
{
|
||||
int low = 0, high = 0;
|
||||
cin >> n >> m;
|
||||
for (int i = 1; i <= n; i++)
|
||||
{
|
||||
cin >> a[i];
|
||||
high += a[i];
|
||||
low = max(low, a[i]);
|
||||
}
|
||||
int s = find(low, high);
|
||||
int t = 0, num = 1;
|
||||
for (int i = 1; i <= m; i++)
|
||||
x[i] = y[i] = 0;
|
||||
|
||||
y[1] = n;
|
||||
for (int i = n; i >= 1; i--)
|
||||
{
|
||||
if (t + a[i] > s)
|
||||
{
|
||||
t = 0;
|
||||
x[num] = i + 1;
|
||||
y[++num] = i;
|
||||
}
|
||||
t += a[i];
|
||||
}
|
||||
x[num] = 1;
|
||||
|
||||
for (int i = m; i >= 1; i--)
|
||||
cout << x[i] << " " << y[i] << endl;
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user