CF #681 div.2

A. Kids Seating

题目:A. Kids Seating

题意:1-4n输出n个数,使这n个数既不互质也不能整除

思路4n是2的倍数,它的最大因数是2n,因此输出中间 n个递减2序列即可

代码

int main()
{
	t = read();
	while (t--) {
		n = read();
		for (register int i = 1; i <= n; i++) {
			write(4 * n - 2 * i);
			printf(" ");
		}
		printf("\n");
	}

	return 0;
}

B. Saving the City

题目:B. Saving the City

题意:对于给定 01字符串 ,消除所有1,其中
1.可以花费a消除相连的一片1
2.可以花费b使一个0变成1

思路: 简单线性动规dp[i],可以用last(上一个1的位置 )来约束。

代码:略

C. The Delivery Dilemma

题目:C. The Delivery Dilemma

题意:给定两个长度为n的数组a,b,任意选择一些下标i,对于已选择的下标i,得到 a i a_{i} ai中的最大值 a,对于未选择的下标i,得到其 b i b_{i} bi之和 b,最后,求min(a+b)

思路:按从大到小重排序数组a(数组b对应下标一起发生变化),然后前缀和预处理数组b,即可

代码:

D. Extreme Subtraction

题目:D. Extreme Subtraction

题意:对于给定数组a,试问是否可通过以下两种操作(次数不限)使其变为全0数组。
1.前k项元素都减1
2.后k项元素都减1

思路显然,满足条件的数组都是可以通过操作(或不用)变换为非严格递减(或非严格递增)序列。因此,处理任意一边,观察是否可以变换为非严格递X序列即可。

1.找到从左(右)端非严格递减序列的最后1个元素
2.然后通过该元素向另一端开始处理(保证从那端开始为非严格递减元素)

关键代码:

//找某端开始的非严格递减序列的最后1个元素
int L = 1, R = n;
int i = 2;
while (i <= n && a[i] <= a[L]) L = i++;
i = n - 1;
while (i >= L && a[i] <= a[R]) R = i--;
//处理,保证从L--R是非严格递减的(处理另一边同样可以)
bool flag = 1;
int dh = a[R]; a[R] = 0;
for (register int i = R - 1; i >= L; i--) {
	if (a[i] < a[i + 1]) {
		flag = 0; break;
	}
	else {
		int t = a[i];
		a[i] = max(a[i + 1], a[i] - dh); //保证递减
		dh = t - a[i];
		}
}

E. Long Permutation

题目:E. Long Permutation

题意:目前 test 4 TLE (到时手写全排列)

思路

结尾

蒟蒻不定时补题,有生之年 ,主要是为了监督自己做题补题。
附一篇参考大佬题解(全),写的更详细:
https://blog.csdn.net/qq_40760407/article/details/109566198

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值