卧薪尝胆,厚积薄发。
      
    
            replace
        
        
        Description:
给
$n$
个
$k$
位二进制数,求他们翻转后的值。
$1\leqslant n\leqslant 2^k,1\leqslant k\leqslant 25$
Solution:
预处理
$2^{14}$
的翻转的值,询问时分两半查一下。
Code:
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cctype>
#include<cstring>
using namespace std;
#define MAXV 14
int Rev[1 << MAXV];
inline int rev(int k)
{
	register int res = 0;
	for(register int i = 1;i <= 14;++i)
	{
		res = res << 1;
		if(k & (1 << (i - 1)))
		{
			res |= 1;
		}
	}
	return res;
}
inline void init()
{
	for(register int i = 0;i < (1 << MAXV);++i)
	{
		Rev[i] = rev(i);
	}
	return;
}
int n,k,s;
inline int my_rand()
{
	s = (214013ll * s + 2531011) & ((1 << k) - 1);
	return s;
}
int ans = 0;
inline void my_hash(int x)
{
	ans = ((long long)ans * 233 + x) % 99824353;
	return;
}
int main()
{
	freopen("replace.in","r",stdin);
	freopen("replace.out","w",stdout);
	init();
	cin >> n >> k >> s;
	for(register int i = 1;i <= n;++i)
	{
		register int x = my_rand();
		register int res = (Rev[x & ((1 << 14) - 1)] << 14) | Rev[x >> 14];
		res = res >> (28 - k);
		my_hash(res);
	}
	cout << ans << endl;
	fclose(stdin);
	fclose(stdout);
	return 0;
}
 In tag:
玄学
          In tag:
玄学 
          
        
        Copyright © 2020
        
          wjh15101051
        
      
      ღゝ◡╹)ノ♡
     Date: Tue Oct 16 14:27:29 CST 2018
          Date: Tue Oct 16 14:27:29 CST 2018
           In Category:
          In Category:
           
         Timeline
            Timeline
           About
            About
           Toolbox
            Toolbox
           Friends
              Friends