zoukankan      html  css  js  c++  java
  • bzoj3097 hash killer 1——构造题

    题意  

    在 $u64$ 自然溢出下,请输出一串字符串和 $L$,使得对任意 $Base$ 都能找到两个长度为 $L$ 的字串的 $Hash$ 值相同。

    分析

    $u64$ 自然溢出等价于两个哈希值模 $2^{64}$ 相等。

    如果 $Base$ 为偶数,只需构造两串长度至少为65的串且只有最高位不同, 因为偶数肯定含有因子2。

    如果 $Base$ 为奇数,构造 $i=12$ 的串和其反串。

    详细过程推荐 博客

    #include<bits/stdc++.h>
    using namespace std;
     
    char s[(1 << 12) + 10];
     
    int  main()
    {
        s[0] = 'a';
        int n = 1;
        for(int i = 0;i <12;i++)
        {
            for(int j = 0;j < n;j++)
            {
                if(s[j] == 'a')  s[j+n] = 'b';
                else s[j+n] = 'a';
            }
            n <<= 1;
        }
        int l = n >> 1;
        printf("%d %d
    ", n + 1 + l, l);
        printf("%s", s);
        for(int i = 0;i < l+1;i++)  printf("a");
        printf("
    ");
        return 0;
    }
    
  • 相关阅读:
    Day4
    Day 4 -E
    Day4
    Day4
    Day4
    Day4
    Day4-F-产生冠军 HDU
    Day4
    Day4-B-最短路径问题 HDU3790
    HackerRank
  • 原文地址:https://www.cnblogs.com/lfri/p/11349171.html
Copyright © 2011-2022 走看看