zoukankan      html  css  js  c++  java
  • 小总结:快速幂+贪心————Bit Mask____UVA 10718 多多去理解去温习哦!

    传送门:https://vjudge.net/problem/UVA-10718

    Preview:

    bitstream:a flow of data in binary form.

    in bit-wise expression:用位表示。

    Her face was a cold blank mask.  她装出一副冰冷冷毫无表情的样子。

    perform a bit-wise AND operation. 

    In bit-wise expression, mask is a common term.

    输入3个数 n,l,u,问你能否找出一个数m,在满足 l <= m <= u的情况下。使得m|n最大,如果有多个数都能使得m|n最大,那么输出最小的那个数。

    分析:

    这题用贪心来写。。我们知道或操作。只要有1进行或操作后会变成1。。

    所以在进行贪心的时候。我们只要考虑n为1的位置尽量用0去填,n为0的位置尽量用1去填。

    不过在这之前要进行一个判断。就是如果当前一位如果填上1,会超过上界r,则只能填0.如果当前一位填上了0,会使得即使后面每位都填上1也到不了下界l,则只能填1.

    然后由于n最大为2^32。。本来想用位运算的结果悲剧了。。最后自己写了个快速幂去把一个数拆解成01的二进制数。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
     
    ll n,l,r;
    int vis[33];
    ll num;
     
    ll mi(ll a,ll b)	//快速幂 
    {
    	ll ans=1;
    	while(b)
    	{
    		if(b&1)	ans=(ans*a);
    		b>>=1;
    		a=(a*a);	
    	}
    	return ans;	
    } 
    
    int main() 
    {
        while(~scanf("%lld%lld%lld",&n,&l,&r))
    	{
    		
    		for(int i=31;i>=0;i--)
    		{
    	    	if(n>=mi(2,i))
    			{
    				n-=mi(2,i);
    				vis[i]=1;
    	    	}
    	    	else vis[i]=0;
    		}
    		
    		num=0;
    		for(int i=31;i>=0;i--)
    		{
    			
    	    	if(mi(2,i)+num>r) continue;		//如果填1超过上界
    	    	else if(mi(2,i)-1+num<l)		//如果填0到不了下界
    				num+=mi(2,i);
    	    	else
    			{
    				if(!vis[i])					//0的位置填1
    		    	num+=mi(2,i);
    	    	}
    	    	
    		}
    	printf("%lld
    ",num);
        }	
        return 0;
    }
    

      

    Resorce:

    https://blog.csdn.net/accelerator_/article/details/10031579

  • 相关阅读:
    Hibernate 事务和并发控制
    InfoSYS-20170114
    STM32学习笔记:读写内部Flash(介绍+附代码)
    STM32串口通信配置(USART1+USART2+USART3+UART4)
    Keil-MDK编译完成后代码大小
    STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示
    关于单片机编程里面调用sprintf死机的解决方法及原因分析
    ESP8266 wifi 模块配置,Wechat+APP控制实现
    STM32常见问题
    深入浅出 TCP/IP 协议
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11385854.html
Copyright © 2011-2022 走看看