zoukankan      html  css  js  c++  java
  • HNOI2018寻宝游戏

    https://www.luogu.org/problemnew/show/P4424

    题解

    我们首先按位考虑。

    如果有一位最终的结果为1,那么我们可以把树的序列看成一个二进制数,先出现的在底位,后出现的在高位,操作序列也可以看做一个二进制数,(and)为1,(or)为0,先出现的在低位,后出现的在高位。

    首先操作序列是不可能把0变成1的,那么要使最后的结果为1,就得考虑数字序列最高位的1,那么如果操作序列的更高位有1,结果肯定会变成0,否则如果操作序列这一位不是1,那么结果肯定是1。

    如果这两种情况都不是,那么说明这一位操作序列和数字序列都是1,这时就得往低位继续判断。

    如此归纳下去,如果需要满足这一位为1,必须要求数字序列>操作序列。

    再考虑多位的情况,相当于是有很多的限制。

    这样我们就会得到一个性质,合法的序列是一段连续的二进制数。

    我们直接把所有序列拍完序后对每个询问暴力扫就好了。

    注意边界!!!!

    代码

    #include<bits/stdc++.h>
    #define N 5009 
    #define M 1009
    using namespace std;
    typedef long long ll;
    const int mod=1000000007;
    char s[N];
    int n,m,q,rnk[N];
    ll ji[N],cnt[N];
    inline void MOD(ll &x){x=x>=mod?x-mod:x;}
    inline ll rd(){
    	ll x=0;char c=getchar();bool f=0;
    	while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
    	while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    	return f?-x:x;
    }
    struct skr{
    	int a[M],id;
    	inline bool operator <(const skr &b)const{
    		for(int i=1;i<=n;++i)if(a[i]!=b.a[i])return a[i]>b.a[i];
    		return 0;
    	}
    }a[N];
    int main(){
    	n=rd();m=rd();q=rd();
    	ji[0]=1;
    	for(int i=1;i<=n;++i)ji[i]=ji[i-1]*2%mod;
    	for(int i=1;i<=n;++i){
    		scanf("%s",s+1);
    		for(int j=1;j<=m;++j){
    			a[j].a[n-i+1]=s[j]^48;
    		}
    	}
    	for(int i=1;i<=m;++i)a[i].id=i;
    	sort(a+1,a+m+1);
    	for(int i=1;i<=m;++i)rnk[a[i].id]=i;
    	for(int i=1;i<=m;++i)for(int j=1;j<=n;++j)if(a[i].a[j])MOD(cnt[i]+=ji[n-j]);
    	for(int j=1;j<=n;++j)MOD(cnt[0]+=ji[n-j]);MOD(cnt[0]+=1);
    	while(q--){
    		scanf("%s",s+1);
    	    int L=m+1,R=0;
    	    for(int i=1;i<=m;++i)
    		  if(s[i]=='1')R=max(R,rnk[i]);
    		  else L=min(L,rnk[i]);
    		if(R>L)puts("0");
    		else printf("%lld
    ",(cnt[R]-cnt[L]+mod)%mod); 
    	}
    	return 0;
    }
    
  • 相关阅读:
    ionic localstorage
    angular 中文鏈接
    把jqmobi 變成jQuery 的插件 從此使用jQuery
    jqmobi 的一些設置
    ionic ngcordova map 地圖
    ionic pull to refresh 下拉更新頁面
    json 對象的序列化
    鍵盤彈出,頁面佈局被推上去了.....
    Cordova V3.0.0中config.xml配置文件的iOS Configuration
    android ios 只能輸入數字 不能輸入小數點的 函數 cordova
  • 原文地址:https://www.cnblogs.com/ZH-comld/p/10770571.html
Copyright © 2011-2022 走看看