视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CF题目集锦PART3#262div2D_html/css
2020-11-27 15:55:29 责编:小采
文档


【#262 div 2 D. Little Victor and Set】


【原题】

D. Little Victor and Set

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Little Victor adores the sets theory. Let us remind you that a set is a group of numbers where all numbers are pairwise distinct. Today Victor wants to find a set of integers S that has the following properties:

  • for all x the following inequality holds l?≤?x?≤?r;
  • 1?≤?|S|?≤?k;
  • lets denote the i-th element of the set S as si; value must be as small as possible.
  • Help Victor find the described set.

    Input

    The first line contains three space-separated integers l,?r,?k (1?≤?l?≤?r?≤?1012; 1?≤?k?≤?min(106,?r?-?l?+?1)).

    Output

    Print the minimum possible value of f(S). Then print the cardinality of set |S|. Then print the elements of the set in any order.

    If there are multiple optimal sets, you can print any of them.

    Sample test(s)

    input

    8 15 3

    output

    1210 11

    input

    8 30 7

    output

    0514 9 28 11 16

    Note

    Operation represents the operation of bitwise exclusive OR. In other words, it is the XOR operation.


    【题意】给定范围L和R,在这之间选P个不同的自然数,其中1<=P<=k,求选出的数最小异或和及某个方案。

    【分析】很显然的结论,K^(K+1)=1,其中K是偶数。当K>3时,我们可以选连续的4个自然数使异或和为0。(当然注意要特判R-L+1的大小)。当K=1时,就是L。当K=2时,显然只能构造异或为1的情况。

    所有的推论都指向一个问题:当K=3的一般情况怎么做?

    【题解】对于那个情况,我一直觉得能贪心构造,但是怎么也想不出简单易行且效率高的算法。

    其实很简单。我们设L<=X

    在二进制中,异或和为0的情况是1,1,0或0,0,0。显然Z的第一位是1,然后X和Y是0。

    因为是贪心,我们要尽量使Y靠近Z(因为如果Z符合范围,Y显然越大越好)。

    那么第二位我们就让Y靠近Z。我们把Z那位设成0,X和Y都设成1,即如下形式:

    110000000

    101111111

    011111111

    当然脑补可能会萎...

    为了少特判,我在R-L+1小的时候直接暴力寻找。

    【代码】

    #include#include#include#define E endl#define INF 999999999999999ll#define RE return 0using namespace std;typedef long long LL;LL len,sum,ans,C,wri[15],temp[15],i,S,L,R,k,x,z;inline void DFS(LL now,LL C,LL sum){ if (now==R+1) { if (sum>=ans||!C) return;len=C;ans=sum; for (int i=1;i<=C;i++) wri[i]=temp[i]; return; } if (now>R) return; DFS(now+1,C,sum);if (C+1>k) return; temp[C+1]=now;DFS(now+1,C+1,sum^now);}int main(){ cin>>L>>R>>k; if (L==R) {cout<=L) {cout<<0< 
    
    
    
    
    

    下载本文
    显示全文
    专题