【5.11】Codeforces 刷题

A. Knapsack

  • 题意:

您有 n ( 1 ≤ n ≤ 200000 ) n (1≤n≤200 000) n(1n200000) 个物品,第 i i i 个物品的重量为 w i ( 1 ≤ w i ≤ 1 0 9 ) w_i (1≤w_i≤10^9) wi(1wi109)。同时您还有一个容量为 W ( 1 ≤ W ≤ 1 0 18 ) W (1≤W≤10^{18}) W(1W1018) 的背包。

我们希望将一些物品加入背包中,使其总重量超过 W W W 的一半,但不超过 W W W

如果有,请输出物品的个数以及物品的编号;如果没有,输出 “-1” (不必输出双引号)。


C. Make Good

  • 题意:给你一串数字,让你在其中插入最多3个数字(可以不插入),使得这些数字的总和等于异或的2倍,只要给出任何一种方案即可。

  • 思路:这道题有结论。我的思路是,计算序列的异或和以及抵消和,用第一个插入的构造数来调整序列和第一个构造数的异或和以及抵消和,从低位到高位调整,直到异或和大于等于抵消和,然后用后两个相同的构造数来组成剩下的抵消和。(注意原序列异或和是奇数的情况)。因为构造数的上限很大,因此也可以直接构造一个很大的数。

  • AC代码:https://codeforces.com/contest/1270/submission/156795343


A. And Matching

  • 题意:在这里插入图片描述

  • 思路:关于配对的构造题。首先发现性质:( i   &   ( n − i − 1 ) = 0 i ~\& ~(n - i - 1) = 0 i & (ni1)=0 以及 ( n − 1 )   &   k = k (n - 1) ~\& ~k = k (n1) & k=k )。对于 k ≠ n − 1 k \neq n- 1 k=n1 的情况,我们总有 n − 1 , k n-1,k n1,k 配对,剩下的总存在方案使得按位与为 0 。对于 k = = n − 1 k == n- 1 k==n1 的情况,也能构造出类似的方案。见题解

  • AC代码:https://codeforces.com/contest/1630/submission/156800033


D. Min Cost String

  • 题意:定义一个字符串 s s s 的花费(cost)为满足 s[i]==s[j] && s[i+1]==s[j+1] 的数对 ( i , j ) , i < j (i,j),i<j (i,j),ij 的数量。现在需要使用从小写字母 a a a 开始的 k k k 种字符,构造一个长度为 n n n 的字符串,且要求花费最小。

  • 每个字母看作一个图上的点,问题转化为无向完全图(双向可走,都有自环)的欧拉回路路径。怎么输出 n 个点的完全图的欧拉路径呢?枚举 i , i ∈ [ 2 , n ] i,i∈[2,n] i,i[2,n] ,将 i i i 点与 j , j ∈ [ i + 1 , k − 1 ] j,j∈[i + 1, k - 1] j,j[i+1,k1] 之间的路径走一下(抽丝剥茧)。注意拼接时的边界问题。

  • AC代码:https://codeforces.com/contest/1511/submission/156822537


A. Johnny and Contribution

  • 题意:在这里插入图片描述

  • 思路:本题的 mex 指的是正整数域内的 mex。首先考虑单个点的合法性,单个点合法的充要条件是,当前点的已知 mex 等于计算出来的 mex。然后考虑全局,全局的合法性是递推的。所以判断前一个就行了。(和 【5.10】Codeforces 刷题 的第一题有点像,都是考虑单个合法性和全局合法性)

  • AC代码:https://codeforces.com/contest/1361/submission/156815955

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值