zoukankan      html  css  js  c++  java
  • 题解 P6075 【[JSOI2015]子集选取】

    CSDN同步

    原题链接

    简要题意:略。

    数据范围:(1 leq n,k leq 10^9).

    考虑一个事情。这玩意儿必定满足,上面方阵的集合里有的,下面没有。左边有的,右边没有;也可以都有。问题不大。

    于是我们可以独立地看待各个元素的情况。

    对于 (forall space [1,k] space) 的元素,很显然,每个元素,在方阵内,选择一个 “左上方的联通块” 进行覆盖,(2^n) 种是不难得到的。

    于是就是 ({2^n}^k = 2^{nk}),你直接快速幂就行。

    时间复杂度:(mathcal{O}(log n imes log k))

    #include<bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    
    inline ll read(){char ch=getchar();int f=1;while(ch<'0' || ch>'9') {if(ch=='-') f=-f; ch=getchar();}
    	ll x=0;while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;}
    
    ll n,k;
    const ll MOD=1e9+7;
    
    inline ll power(ll x,ll y) {
    	ll ans=1;
    	while(y) {
    		if(y&1) ans=(ans*x)%MOD;
    		x=(x*x)%MOD; y>>=1;
    	} return ans;
    }
    
    int main(){
    	n=read(),k=read();
    	printf("%lld
    ",power(2,n*k));
    	return 0;
    }
    
    
    简易的代码胜过复杂的说教。
  • 相关阅读:
    特斯拉PET钥匙-蓝牙无钥匙
    超声波倒车雷达
    KiCad层次原理图标签和引脚的操作
    Nuget常用命令
    TCP/IP协议入门
    unbuntu(18.04)下体验dotnet core
    c#中的异步
    Git的不完全使用指南
    c#语言特性8.0
    c#语言特性7.x
  • 原文地址:https://www.cnblogs.com/bifanwen/p/14319239.html
Copyright © 2011-2022 走看看