lower_bound(UVA-11636) printf //reverse(不是reserve) //substr 【异或】(感谢谷歌娘qwq)

啊啊,helloworld的题。。我非要这么写-.-

zj(兴高采烈):我半个小时A了六个题哦!很简单的,你肯定也可以一个小时之内&*....

我:.....

https://cn.vjudge.net/problem/UVA-11636

#include<iostream>
#include<algorithm>
using namespace std;
int a[14]={2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,100010};

int n;
int main(){
	int kase=1;
	while(cin>>n){
		if(n<=0)break;
		else if(n==1)printf("Case %d: 0\n",kase++);
		else{
		int pos = lower_bound( a, a + 14, n) - a;
		pos=pos+1;
		printf("Case %d: %d\n",kase++,pos);
	//cout<<pos+1<<endl;
		}
	}
	return 0;}

稍微注意一下有负数情况,然后n=0不行要小鱼等于才可以。

学一下lower_bound用法,就是很快的(通过二分)二分里面找到了它 的位置

插入的数字是m,一共有n个数字

biubiu比如1234445,那么你插入的left就是

  left = upper_bound(a,a+n,m)-a; //按从小到大,m最多能插入数组a的哪个位置
      right = lower_bound(a,a+n,m)-a; //按从小到大,m最少能插入数组a的哪个位置

也就是哦,a[5]里面,n=5,m=2,要插入2

最多 就是upper pos就是3 a[3]

(其实已经是第四个位置了,但是下标是3..)

最少 就是lower pos就是2 a[2]

(其实也是第三个了...但是下标是a[2])


然后这个题里面是2的n次方嘛..

int pos = lower_bound( a, a + 14, n) - a;

然后就是n插入的话,最少的那个次方咯

比如n=5,那么只能插入在4后面,2,4,5它就是2,a[2] 2^2=4

再比如n=3,那么只能在2后面,它是第二个,也就是a[1],2^1=2

再比如n=4,因为是lower_bound所以和3一样,……也是1,然后pos+1(因为这个题的特殊性……)

……?竟然4是1然后加……

小问题..改成upper就可以了,这个时候4是2  3是1 5是2 (但是这个题会出错,因为题目的意思是 复制完了之后可以再复制好多遍云云)

参考:https://www.cnblogs.com/ljhacm/p/6904414.html


printf的用法……(这种情况之下都显然是printf更方便)

printf不用加&,pos++多方便啊

printf("Case %d: %d\n", kase++, pos+1);

对scanf来说他要把东西送到人家家里去,所以需要获取人家的地址


(先让我笑一会……)


reverse:

参考https://blog.csdn.net/u012877472/article/details/49557077

头文件是algorithm 用于翻转...

  1.    string b;  
  2.         reverse(a.begin() ,a.end());  
  3.         cout<<a<<endl; 


substr:提取从 哪里到哪里

temp = a.substr(i, len2);


与:两位同时为“1”,结果才为“1”,否则为0

参照(^运算,全真才真,一假则假)

(但是其实符号是&呀)


或:参加运算的两个对象只要有一个为1,其值为1。

运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;

   (参照或| ,全假才假,一真就真)(更加宽容hhhh)


哇!异或

参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;

   即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

【异吗?如果是一样的,0和0,就不异,是假的(0,考了0分)】

【异吗?如果是不一样的,1和0,是异的,是真的(1,true,考了一百)】


移动

左移运算符(<<)

相当于是2的i次方 从i=1开始 2的1 ,2,3,。。。次方

1 << i


参考https://blog.csdn.net/21aspnet/article/details/7387373。。。一定要记住哇~


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值