ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #772 (Div. 2)

2022-02-21 13:31:55  阅读:208  来源: 互联网

标签:两个 772 一个 位置 最后 Codeforces 合法 Div 贪心


A

大概是可以把两个数 \(x\) 和 \(y\) 替换成 \(a\) 和 \(b\),满足 \(x|y=a|b\),求最终的和最小。这东西直接贪心就好了,由于是或起来,最终序列内所有数的或和是不变的,那我们直接贪心构造,最终和一定是大于等于这个或和的,那我们把一个数变成或和,别的都是 \(0\),就是最小的和。

B

每次可以把一个数改成 \([1,10^9]\) 内的任意一个数,求最少多少次满足没有一个 \(i\) 使得 \(a_i>a_{i-1}\) 且 \(a_i>a_{i+1}\)。发现是严格大于,所以不难发现,等于是一个非常好的情况。于是考虑从前往后做,这时候贪心希望能把后面不合法的破坏掉。于是我们对于一个不合法的位置 \(i\),把 \(i+1\) 的位置赋值为 \(i+1\) 位置相邻两个中的最大值,这样假如说后面有一个位置不合法就把它啊掉了并且不会产生新的不合法位置。

C

考虑倒数第三个位置,只能变成最后两个数相减的结果。最后两个数都不能变。

然后假如说最后一个数是负数,那么对于位置 \(i\),它后面都是递增的,只有 \(a_i>a_{i+1}\)。那这个位置不可能变得比 \(a_{i+1}\) 小。

然后假如说最后一个数不是负数,那只有最后两个数是递减的时候是不行的,别的情况我们把每个位置赋值为最后两个数相减,题目允许等于。

所以分类判断以下就可以了。

D

考虑一个简化的问题,如果保证了,\(a\) 中的每个数间都不能通过这些操作变成相同的,也就是每个数间是独立的,那怎么做?直接令 \(dp_i\) 表示二进制有 \(i\) 位的数的个数,然后先把 \(dp[\operatorname{log}_2a_i]\) 都加一,然后做斐波那契的递推就好了。

问题是怎么去重。我们把 \(a[]\) 排序,容易发现,如果 \(a_i<a_j\) 并且 \(a_i\) 能够变成 \(a_j\),那么 \(a_j\) 能够通过在后面删去得到 \(a_i\)。

E

考虑对于每一对限制,两辆车的方向一定是不同的,所以对此我们可以黑白染色,然后对于每个连通块,就转化为给定若干组大小关系,求一组满足题意的解,这东西用拓扑跑一下就行了。

没写完。

F

标签:两个,772,一个,位置,最后,Codeforces,合法,Div,贪心
来源: https://www.cnblogs.com/ZCETHAN/p/15918445.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有