Educational Codeforces Round 69 (Rated for Div. 2)

A. DIY Wooden Ladder

排个序,最长的两根作梯子的腿,然后答案就是 剩余梯子的个数,梯子腿长度-1。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
int a[100005];
int main()
{
	int T;
	scanf("%d", &T);
	while (T--)
	{
		int n;
		scanf("%d", &n);
		for (int i = 0; i < n; i++)
			scanf("%d", &a[i]);
		sort(a, a + n);
		int ans = min(a[n - 2] - 1, n - 2);
		printf("%d\n", ans);
	}
}

B. Pillars

找到最大值,左右扫

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
int a[200005];
int main()
{
	int n;
	scanf("%d", &n);
	int maxn = 0, f = 0;
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
		if (maxn < a[i])
		{
			maxn = a[i];
			f = i;
		}
	}
	for (int i = f; i > 1; i--)
	{
		if (a[i - 1] > a[i])
		{
			printf("NO");
			return 0;
		}
	}
	for (int i = f; i < n; i++)
	{
		if (a[i] < a[i + 1])
		{
			printf("NO");
			return 0;
		}
	}
	printf("YES");
}

C. Array Splitting

维护差分数组,排个序,最大的k个不选。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
int a[300005];
ll sum;
int main()
{
	vector<ll>v;
	int n, k;
	scanf("%d%d", &n, &k);
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	if (k == n)
	{
		printf("0");
		return 0;
	}
	ll ans = 0;
	for (int i = 2; i <= n; i++)
	{
		v.push_back(a[i] - a[i - 1]);
		sum += a[i] - a[i - 1];
	}
	sort(v.begin(), v.end(), [](ll q, ll w) {
		return q > w;
		});
	for (int i = 0; i < k - 1; i++)
	{
		sum -= v[i];
	}
	printf("%lld", sum);
}

D. Yet Another Subarray Problem

1、枚举起点的余数,从起点的余数开始每m个数字为一段,将每段的第一个数字减去k.

2、对于每一个位置,计算一下以这个点为终点所获得的价值。

3、由于起点的余数已经确定(枚举),所以在每一段的开始,更新前面的所有段能取到的最小前缀和。

Code:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll a[300005];
int main()
{
	int n, m, k;
	ll res = 0;
	scanf("%d%d%d", &n, &m, &k);
	for (int i = 0; i < n; i++)
		scanf("%lld", &a[i]);
	for (int i = 0; i < m; i++)
	{
		ll sum = 0, minn = 0;
		for (int j = i; j < n; j++)
		{
			if (j % m == i)
			{
				minn = min(minn, sum);
				sum -= k;
			}
			sum += a[j];
			res = max(res, sum - minn);
		}
	}
	printf("%lld\n", res);
}

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 13:05
TMD找工作本来就烦,这东西什么素质啊😡
Beeee0927:hr是超雄了,不过也是有道理的
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
星辰再现:裁员给校招生腾地方
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务