第五天,趣题,守序者的尊严&&光骓者的荣耀

题手续这的尊严

题光什么者的荣誉

今天我更新了两天,这个文章有两个趣题,今天带大家过个瘾!!

哈哈哈哈,这道题我是服了,想了......屏幕机前的你,不要往后看了,自己想,真的很简单!

先讲手续这的尊严,一道入门题,怎么变成普及-了?就是看你思维活不活跃,整个题就是判断有多少个01区间。懂了吗,写吧。

for (int i = 2;i <= n;i++) if (a[i] != a[i - 1]) cnt++;

这个题就是要你数有多少个00000,11111。只要有一串1或0,就加一,可以自己试试。这个代码就是只要有一个分割就说明有一个串,cnt初始为1。最后打印就完事了,如果没看懂就在去康康题。

完整代码:

#include <bits/stdc++.h>
using namespace std;
int n,a[1000001],cnt = 1;
int main(){
	cin >> n;
	for (int i = 1;i <= n;i++) cin >> a[i];
	for (int i = 2;i <= n;i++) if (a[i] != a[i - 1]) cnt++;
	cout << cnt + 1 << "\n";
	return 0;
}

好了,我来讲一下第二道题,感觉挠度飙升了吧?都是一个比赛,怎么可能难度不一样?

怎么做,自己想。我一开始想把他们搜索k个最大的连在一起的,可没必要。我就用dp,哈哈。可这是要在前缀和的情况下,不懂就康康我的第二天。没想到吧?

#include <bits/stdc++.h>
using namespace std;
long long n,k,a[1000001],s[1000001];
int main(){
	cin >> n >> k;
	n--;
	if (k >= n){
		cout << 0 << '\n';
		return 0;
	}
	for (int i = 1;i <= n;i++){
		cin >> a[i];
		s[i] = s[i - 1] + a[i];
	}
	long long ma = s[k];
	for (int i = 2;i <= n + 1 - k;i++) ma = max(ma,s[i + k - 1] - s[i - 1]);
	cout << s[n] - ma << "\n";
	return 0;
}

加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值