• jzoj 4616. 【NOI2016模拟7.12】二进制的世界


    Question

    在这里插入图片描述

    Solution

    这题考场就打了个暴力。
    结果有人O(216n)O(2^{16}*n)过了。。。
    正解是“折半”,O(28n)O(2^8*n)
    我们设f[i][j]f[i][j]
    有两个数x,yx,y
    x=a256+bx=a*256+b
    y=c256+dy=c*256+d
    (此处的ii就表示a,jj就表示dd
    f[i][j]f[i][j]就表示这样情况下的后八位操作后的最大值,
    g[i][j]g[i][j]表示其方案数。

    加入操作:

    我们设当前加入的数为xxx=a256+bx=a*256+b
    我们枚举一个dd(就是上述的dd
    我们将所有的f[a][d]f[a][d]bb optopt ddmaxmax

    查询操作:

    我们设要查询的数为xxx=a256+bx=a*256+b
    我们枚举一个cc(就是上述的cc
    我们对于一个f[c][b]f[c][b],前八位直接用aa optopt cc得到,后八位则是用f[c][b]f[c][b]来得到的。
    也就是说,我们设k=(ak=(a optopt c)256+f[c][b]c)*256+f[c][b],然后将kk与答案ansans进行比较即可。

    Code

    #include<cstdio>
    #define N 100010
    using namespace std;
    int n,type,a[N],le,ri,s1,s2;
    int ma[261][261],hav[261][261];
    char s[5];
    
    inline int read()
    {
    	int x=0; char c=getchar();
    	while (c<'0' || c>'9') c=getchar();
    	while (c>='0' && c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
    	return x;
    }
    
    inline int get(int x,int y)
    {
    	if (s[1]=='a') return x&y;
    	if (s[1]=='o') return x|y;
    	if (s[1]=='x') return x^y;
    }
    
    int main()
    {
    	freopen("binary.in","r",stdin);
    	freopen("binary.out","w",stdout);
    	n=read(),scanf("%s",s+1),type=read();
    	for (int i=1;i<=n;i++) a[i]=read();
    	for (int i=1,k;i<=n;i++)
    	{
    		le=a[i]/256,ri=a[i]%256;
    		if (i!=1)
    		{
    			s1=s2=0;
    			for (int j=0;j<=255;j++)
    			{
    				if (!hav[j][ri]) continue;
    				k=get(le,j)*256+ma[j][ri];
    				if (s1<k) s1=k,s2=hav[j][ri];
    				else if (s1==k) s2+=hav[j][ri];
    			}
    			if (type==1) printf("%d %d
    ",s1,s2);
    			else printf("%d
    ",s1);
    		}
    		for (int j=0;j<=255;j++)
    		{
    			k=get(ri,j);
    			if (ma[le][j]==k) hav[le][j]++;
    			else if (ma[le][j]<k) ma[le][j]=k,hav[le][j]=1;
    		}
    	}
    	return 0;
    }
    
    转载需注明出处。
  • 相关阅读:
    CB文件读入后输出中文乱码问题
    2019-ICPC-沈阳站打铁感想
    计蒜客习题:画图游戏(Havel-Hakimi定理)
    计蒜客练习题:接龙(带权并查集)
    搜索----Dungeon Master
    最短路 poj1502 MPI Maelstrom
    poj 3259 Wormholes
    Silver Cow Party
    Til the Cows Come Home
    Cow Contest
  • 原文地址:https://www.cnblogs.com/jz929/p/11817524.html
Copyright © 2020-2023  润新知