A. Print a Pedestal (Codeforces logo?)
题意
水题,一个数,让你分成三个数a,b,c,关系大小为b>a>c,要严格大于,而且要使b的取值尽可能地大
题解
分三种情况讨论即可
#include <bits/stdc++.h>
#define ll long long
#define gcd __gcd
#define endl '\n'
#define mem(x, y) memset(x, y, sizeof(x))
#define inf 0x3f3f3f
#define ninf 0xc0c0c0c0
#define se second
#define fr first
using namespace std;
typedef pair<int, int> PII;
const int N = 200010;
int a[N];
void solve()
{
int n;
scanf("%d", &n);
if (n == 7)
{
printf("2 4 1\n");
return;
}
if (n % 3 == 0)
{
printf("%d %d %d\n", n / 3, n / 3 + 1, n / 3 - 1);
}
else if (n % 3 == 1)
{
printf("%d %d %d\n", n / 3 + 1, n / 3 + 2, n / 3 - 2);
}
else
{
printf("%d %d %d\n", n / 3 + 1, n / 3 + 2, n / 3 - 1);
}
}
signed main()
{
int t;
scanf("%d", &t);
while (t--)
solve();
}
B. Array Decrements
题意
给你a,b两个序列,以及一种操作:
选中a序列中的一个数,让a序列中除了这个数以外的数全部减一,问最终能否能变成b序列
题解
维护除bi=0以外,所有ai与bi的差值,如果bi>ai一定不可以,差值不相等也不可以,同时维护bi为0的ai的最大值,如果出现过bi等于0,且ai的最大值大于其他bi不等于其他差值,也是不可以,除此以外都是可以
#include <bits/stdc++.h>
#define ll long long
#define gcd __gcd
#define endl '\n'
#define mem(x, y) memset(x, y, sizeof(x))
#define inf 0x3f3f3f
#define ninf 0xc0c0c0c0
#define se second
#define fr first
using namespace std;
typedef pair<int, int> PII;
const int N = 200010;
int a[N];
int b[N];
struct node
{
int x, id;
} sum[N];
bool cmp(node a, node b)
{
return a.x < b.x;
}
void solve()
{
int n;
int x, y = -100, flag = 0, ff = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
for (int i = 1; i <= n; i++)
{
scanf("%d", &b[i]);
}
for (int i = 1; i <= n; i++)
{
if (a[i] < b[i])
{
flag = 1;
break;
}
}
for (int i = 1; i <= n; i++)
{
if (b[i] != 0)
{
if (ff == 0)
{
x = a[i] - b[i], ff = 1;
}
else
{
if (x != a[i] - b[i])
{
flag = 1;
break;
}
}
}
else if (b[i] == 0)
{
y = max(y, a[i]);
}
}
if (y > x && ff == 1)
{
flag = 1;
}
if (flag)
printf("NO\n");
else
printf("YES\n");
}
signed main()
{
int t;
scanf("%d", &t);
while (t--)
solve();
}
C. Restoring the Duration of Tasks
题意
给两个序列,一个代表一个事件的开始时间,一个代表一个事件的结束时间,让你求做每个占用做的时间,必须一个事件做完,才能做下一个事件
题解
用每个事件的开始时间和上一个事件结束的时间去比较,如果这个事件的开始时间比上一个事件的结束时间早的话,用这个事件结束的时间减去上一个事件的结束时间即可
#include <bits/stdc++.h>
#define int long long
#define gcd __gcd
#define endl '\n'
#define mem(x, y) memset(x, y, sizeof(x))
#define inf 0x3f3f3f
#define ninf 0xc0c0c0c0
#define se second
#define fr first
using namespace std;
typedef pair<int, int> PII;
const int N = 200010;
int a[N];
void solve()
{
int a, b, c;
scanf("%lld%lld%lld", &a, &b, &c);
for (int i = 1; i * a <= c; i++)
{
int x = c - i * a;
if (x < 0)
{
break;
}
if (x % b == 0)
{
printf("%lld %lld\n", i, x / b);
return;
}
}
printf("-1\n");
}
signed main()
{
solve();
}
剩下的明天补上~