Codeforces Round #618 (Div. 2)

题意:

t组输入,给出个n,代表接下来给出长为n的数组,你可以对数组中的任意的数采取加一操作任意次,问最少操作多少次该操作可以使其和不为零并且其积不为零。

题解:

直接计算其和和其零的数量,分别讨论它的四种情况,对每种情况讨论。(切忌直接计算其积,100的100次方会爆long long)

代码:

https://codeforces.com/contest/1300/submission/70707175



题意:

t组输入,给出一个n,代表下面给出长为2*n的数组。将这2*n个人分成两个班,每个班有奇数个人。怎么分配人能使两个班的中位数差最小。

题解:

首先有一点使肯定的想要最小,那两个班的中位数一定是2*n数组中的相邻的两个数,要构造出他们两个是两个班的中位数,他们必须要满足一个条件,结构:左边的数+中位数+右边的数,左边的数的数量=右边的数的数量,因此比中位数小的数的数量=比中位数大的数的数量,所以两个相邻的数一定位于中间。

代码:

https://codeforces.com/contest/1300/submission/70644473



题意:

f(x,y)=(x|y)-y。

给出一个n,代表下面给出一个长为n的数组,重新排序数组,使其f(f...f(a1,a2),a3),...an-1),an)最大。

题解:

遇到这种题,一般需要将其转换成只有一个运算符,根据f(x,y)的真值表,只有x=1,y=0的情况值才为1,其余均为0,不妨将其转换成x&(-y),其真值表是一致的,因此问题转化为使a1&(~a2)&(~a3)...&(~an)最大了,其真值为只有a1=1,其余皆为0才为1,其他情况都为0,所以,找到最大一位且只有一个数有这一位的一的数,将其放在第一位即可,f(f...f(a1,a2),a3),...an-1),an)的最大值为2的(只出现一次一的那一位的位数-1)次方。

代码:

https://codeforces.com/contest/1300/submission/70714186

上述代码中有bitset的知识,不懂的可以看我的文章有bitset的介绍:

https://www.jianshu.com/writer#/notebooks/42202619/notes/60304504

全部评论

相关推荐

10-24 00:54
已编辑
门头沟学院 Java
牛客20646354...:这连小厂都找不到就离谱,只能说可能你根本没投什么小厂。说实话现在都要11月了,没什么岗位了。其实最好是在9月找,那时候暑假工刚走,岗位多的是,现在都占满了岗位了,秋招的秋招,顶替暑假工的也基本上都顶替了。 只能多投了,简历其实都差不多,你这都不是外卖+点评去找实习了,已经比好多人优秀了。实在找不到,可以降低一些标准的,能投到自研项目的小厂说实话可能比你去中大厂能学到更多东西。因为中大厂最多给你看一点点模块功能,小厂基本上全部代码甚至几个项目的代码都能拿到。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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