Codeforces 460d Littel victor and set
2015-09-04 16:15
483 查看
题意:给出一个范围[l,r],以及一个数k,让从[l,r]这个区间中选不超过k个数a1, a2, a3…an,使f = a1^a2^a3…^an最小。
思路:就是一个找规律的数学题。可以先从两个的入手,然后再从4个的入手,最难得其实是3个数的情况,但是仔细分析不难观察到其规律,代码已经很能说明思路了就不再反复写了。
代码:
思路:就是一个找规律的数学题。可以先从两个的入手,然后再从4个的入手,最难得其实是3个数的情况,但是仔细分析不难观察到其规律,代码已经很能说明思路了就不再反复写了。
代码:
[code]/************************************************************************* > File Name: 460d.cpp > Author: Mathon > Mail: luoxinchen96@qq.com > Created Time: 2015年09月04日 星期五 14时53分25秒 ************************************************************************/ #include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { LL l, r, k; cin >> l >> r >> k; if(k >= 4) { for(LL i = l; i + 3 <= r; i++) { if(i % 2 == 0) { printf("0\n4\n%I64d %I64d %I64d %I64d\n", i, i + 1, i + 2, i + 3); return 0; } } } if(k >= 3) { LL t = 3; LL x = l; while(x > 0) { x >>= 1; t <<= 1; } t >>= 1; if(t <= r) { printf("0\n3\n%I64d %I64d %I64d\n", t, l^t, l); return 0; } } if(k >= 2) { for(LL i = l; i + 1 <= r; i++) { if(i % 2 == 0) { printf("1\n2\n%I64d %I64d\n", i, i+1); return 0; } } } if(k > 1) { if((l^r) < l) { printf("%I64d\n2\n%I64d %I64d\n", l^r, l, r); return 0; } } printf("%I64d\n1\n%I64d\n", l, l); return 0; }
相关文章推荐
- strcpy,strnpy和strlcpy的区别
- padding margin border 和元素大小
- UITabBarItem改变字体颜色
- Java判断两个时间段是否有交集
- HDU 2086 A1 = ?(规律)
- 自我学习
- 应用程序的 DIY__(给程序加上新功能)
- 剑指offer整理归纳(1/2)
- 1053. Path of Equal Weight (30)
- HTML5 Canvas绘图API
- PAT 1083. List Grades (25)
- Clothes
- Effective Java 英文 第二版 读书笔记 Item 4:Attempting to enforce noninstantiability by making a class abstract does not work.
- C++基础---纯虚函数
- Active Defense Harbinger Distribution
- 修改mysql主键的值为自增
- 整理阅读的论文(六)
- Hibernate案例-------基于xml配置,使用Hibernate实现对员工表的增、删、改、查功能
- 集合心得
- 19.模板方法模式