C++学习笔记(四) 位运算,洛谷“还是八王后”、“起床困难综合征”,9分钟oj“直播获奖”

1.

/*
与运算 &
 1010
&0110
-----
 0010 
用来获取某个数在2进制状态下某一位的值
a&1=1 a是奇数
a&1=0 a是偶数

或运算 |
 1010
|0110
-----
 1110 
对某个数在2进制下某一位强行赋值

异或 ^
 1010
^0110
-----
 1101
^0110
-----
 1010
异或 相同为0,不同为1
(a^b)^b=a

非 ~
一个数0变1,1变0

移位 <<、>>

lowbit函数
int lowbit(int a){
	return a&(-a)
}
b是a在2进制状态下 从右向左第一个2的位置
b=lowbit(10100)//10100:二进制 
b:100//100:二进制 
   
*/

2.

#include <iostream>
using namespace std;
int n,a[20]/*初始状态*/,ans;
int lowbit(int a){
	return a&(-a);
}
void dfs(int num,int now,int ld,int rd){
	if(now==(1<<n)-1){//每一列都不可以放东西(n=4->now=1111)
		ans++;
		return;
	}
	int tot=(((1<<n)-1)&(~(now|ld|rd|a[num])/*0不可以*/)/*将前面多余的1去掉*/);
	while(tot){/*还可以放*/
		int tox=lowbit(tot);
		tot=tot-tox;
		dfs(num+1,now+tox,(ld+tox)>>1,(rd+tox)<<1);
	} 
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		char s[20];
		scanf("%s",s+1);//初始位置从1开始 
		for(int j=1;j<=n;j++){
			if(s[j]=='.')
				a[i]|=(1<<(n-j));
		}
	}
	dfs(1,0,0,0);
	cout<<ans;
	return 0;
} 

3.

#include<bits/stdc++.h>
int n,m,ans,x,a1=0,a2=-1;
char str[5];
int main(){
	scanf("%d%d",&n,&m);
	while(n--){
		scanf("%s%d",str,&x);
		if(str[0]=='A') a1&=x, a2&=x;
		if(str[0]=='X') a1^=x, a2^=x;
		if(str[0]=='O') a1|=x, a2|=x;
	}
	for(int j=29;~j;--j){
		if(a1>>j&1) ans+=1<<j;
		else if(a2>>j&1&&(1<<j)<=m) ans+=1<<j, m-=1<<j;
	} printf("%d",ans);
	return 0;
}

4.

#include <iostream>
#include<algorithm>
#include <cstring>
using namespace std;
int main(){
	long long n,m,sum;
	int x,a[650],w;
	memset(a,0,sizeof(a));
	cin>>n>>w;
	for(int i=1;i<=n;i++){
		cin>>x;
		a[x]++;
		sum=0;
		for(int j=600;j>=0;j--){
			sum=sum+a[j];
			if(sum>=max(1,i*w/100)){
				cout<<j<<" ";
				break;
			}
		}
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值