ACM-其它
Nicetomeetu-
没有
展开
-
二进制表示法中1的个数最多的整数 构造
1的个数最多的整数给定整数a和b(0≤a≤b≤263-1),输出区间[a,b]中对应二进制表示含1的个数最多的整数,如果存在多个解,则输出符合条件的最小的整数。输入格式:第1行:一个整数T(1≤T≤10000)为问题数。第2~T+1行:每个问题占一行,每行输入两个整数a和b(0≤a≤b≤263-1)。数据之间用一个空格分隔。 输出格式:对于每个问题,输出一行问题的编号(原创 2017-04-25 16:27:26 · 1276 阅读 · 0 评论 -
(2017多校训练第二场)HDU - 6047 Maximum Sequence 贪心 + 单调队列
比赛的时候是用线段树写的,赛后看了题解发现还有单调队列这种操作。官方题解:想学习单调队列可以看下这篇博客:点击打开链接代码如下:#include using namespace std;typedef long long int LL;const int MAX_N = 250005;const int MOD = 1e9 + 7;struct Node{原创 2017-07-29 21:44:47 · 323 阅读 · 0 评论 -
(2017多校训练第七场)HDU - 6129 Just do it 找规律
借用别人博客的一张图。只需要计算出每个元素对应贡献的奇偶即可,然后对于这个元素影响到的所有列进行计算。此外C(n, m)为奇数等价于n & m == m。代码如下:#include using namespace std;const int N = 2e5 + 5;int a[N];int b[N];int n, m;int main(){ //f原创 2017-08-16 12:15:29 · 531 阅读 · 0 评论 -
(2017多校训练第七场)HDU - 6127 Hard challenge 极角排序+尺取法
首先如果我们知道了一条直线左边和右边的点,只需要将左边点的value值的求和乘以右边点的value的值的求和即可。对于每个元素极角排序是显然的事情。排完序之后,我们获得一圈点,很容易发现一条直线会把这个圆圈切割成两半,所以只需要枚举两个切割点即可。枚举切割点的方法是尺取法。假设所有点的value值的求和是tot对于区间的左端点L,我们不断的增加R,直到R和L的极角差刚刚小于18原创 2017-08-16 14:54:07 · 362 阅读 · 0 评论 -
(2017多校训练第六场)HDU - 6103 Kirinriki 尺取法
官方题解:代码如下:#include using namespace std;const int N = 5005;char str[N];int len;int ans;int m;void solve(int x, int y){ int l = 0, r = 0, sum = 0; while (x - r >= 1 && y + r <=原创 2017-08-16 18:52:26 · 401 阅读 · 0 评论 -
(2017多校训练第三场)HDU - 6058 Kanade's sum 链表
比赛的时候想到了把问题转化成求每个元素对于答案的贡献,即这个元素在多少个区间内是第k大数。至于怎么维护这个信息现场没想出来。赛后看了网上的博客才知道这道题目的解法。如果我们知道一个元素在多少区间内是第k大数(即这个元素的贡献),那么答案就是这个元素的值乘上其贡献。又想到一个元素在区间内是第k大数要满足什么条件呢?在这个区间内恰好有k - 1个数比它大就行了。所以如果知道这个元素左边原创 2017-08-02 16:33:49 · 262 阅读 · 0 评论 -
(2017多校训练第二场)HDU - 6052 To my boyfriend 思维题
思路就是求某种颜色对于答案的贡献,然后累加起来即可。考虑颜色c对答案的贡献,即至少包含一个c颜色格子的矩阵的数目。现在的问题是我们如何不重复不遗漏的统计个数。先排个序(行号升序,列号升序,实际上也就是从左往右从上往下的考虑)。把每个合法的矩阵算在序最小的那个关键点头上,这样就可以保证不重复,不遗漏。那么我们再找包含第一个关键点的矩阵的时候,显然没有任何限制,只需要包含这个点就行了。找第二个关键原创 2017-08-05 00:49:18 · 404 阅读 · 0 评论 -
(2017多校训练第一场)HDU - 6040 Hints of sd0061 nth_element函数
官方题解:代码如下:#include using namespace std;typedef long long int LL;const int MOD = 998244353;const int MAX_N = 105;const int INF = 0x3f3f3f3f;struct Node{ int val; int pos; b原创 2017-08-06 11:16:40 · 348 阅读 · 0 评论 -
HDU 6168 Numbers 思维
题目HDU 6168 分析官方题解 和HDU 6092很类似,不过区别在于6092那道题目可以取多个不同的数字组成一个新的数,所以要用0-1背包。这道题目只能取两个数字组成一个新的数,所以用一个mapmap维护能够组成的数字就行了,每找到一个新的数字,就遍历之前所有的数来更新mapmap。虽然代码看起来是三重循环,但是复杂度是O(M+N2)O(M+N^2)。代码#include <cstrin原创 2017-08-24 23:01:26 · 420 阅读 · 0 评论