只写了通过率最低的俩题,摸鱼壬
A.切蛋糕
//误差不大于1/1024,无脑切成2048块,每块1/2048
#include <bits/stdc++.h>
using namespace std;
int main()
{
int k;
cin >> k;
cout << k + (1 << 11) - 1 << endl;
//公式:2^0 + 2^1 + …… + 2^10 = 2^11 - 1
for (int i = 0; i < 11; i ++)
{
for (int j = 1; j <= (1 << i); j ++)
{
printf("1 %d\n", i);
}
}
int cnt = (1 << 11) / k;
for (int i = 1; i <= k; i ++)
{
printf("2 %d ", cnt);
for (int j = 1; j <= cnt; j ++)
{
printf("11 ");
}
putchar('\n');
}
return 0;
}
E.贪吃的派蒙
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 1e5 + 5;
int a[maxn];
int sum[maxn];
signed main()
{
int t;
cin >> t;
while (t --)
{
int n, k;
cin >> n >> k;
int ax = 0, x = 0;
a[0] = sum[0] = 0;
for (int i = 1; i <= n; i ++)
{
scanf("%ld", &a[i]);
sum[i] = sum[i - 1] + a[i];
if (a[i] > ax)
{
ax = a[i];
x = i;
}
}
int minl = x - 1, maxl = sum[x] - ax;
int minlr = n - 1, maxlr = sum[n] - ax;
if (k >= minl && k <= maxl)
{
puts("YES");
}
else
{
if ((k - minl) % (ax + minlr) <= maxl - minl + (k - maxl + minl) / (ax + minlr) * (maxlr - minlr))
{
puts("YES");
}
else
{
puts("NO");
}
}
}
return 0;
}