2021.1.24

这里写自定义目录标题



先进后出
#include
using namespace std;
const int N=100;
int st[N],q[N];
int bottom=0,top=-1;
int n;
int main()
{
cin>>n;
while(n–)
{

	cin>>st[++top]; 
	
 } 
  while(top>=bottom)
  {
  	
  	cout<<st[top--]<<“ ”;
  	 
  }
  return 0;
	       	、

队列
先进先出
#include
using namespace std;
const int N=100;
int st[N],q[N];
int bottom=0,top=-1;
int front=0,rear=-1;
int n;
int main()
{
cin>>n;
while(n–)
{

	cin>>q[++rear]; 
	
 } 
  while(rear>=front)
  {
  	
  	cout<<q[front++]<<" ";
  	 
  }
  return 0;

}
串: 由0个或多个字符组成的有限序列 s=”a1a2….an”
S是串名 引号里面的是串的值 n是串的长度 0个字符的串是空串
空格也算一个元素 一个或多个空格组成的串称为空格串(不是空串)
(1) StrAssign (&T,chars) //串赋值
(2) StrCompare (S,T) //串比较
(3) StrLength (S) //求串长
(4) Concat(&T,S1,S2) //串联
(5) SubString(&Sub,S,pos,len) //求子串
(6) StrCopy(&T,S) //串拷贝
(7) StrEmpty(S) //串判空
(8) ClearString (&S) //清空串
(9) Index(S,T,pos) //子串的位置
(11) Replace(&S,T,V) //串替换
(12) StrInsert(&S,pos,T) //子串插入
(12) StrDelete(&S,pos,len) //子串删除
(13) DestroyString(&S) //串销毁
}ADT String
BF算法(串的匹配算法,又叫暴力破解法)
int Index_BF(SStrringS,SStringT) //主串S子串 T
{
int j=1,i=1;
while(i<=S.length&&j<=T.length)
{
if(S.ch[i]=T.ch[i]) {++i;++j;} //主串和子串依次匹配下一个字符
else {i=i-j+2;j=1;} // 主串和子串重新回溯 重新开始下一次匹配

}
if(j>T.length) { return i-T.length;}// 匹配成功 返回第一个字符的下标
 
else return 0;//   匹配不成功 
   kmp算法(最大公共前缀移动到公共后缀的位置)

} 二分

335
二分模板一共有两个,分别适用于不同情况。
算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。

版本1
当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。

C++ 代码模板:
int bsearch_1(int l, int r)
{
while (l < r)
{
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
版本2
当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。

C++ 代码模板:
int bsearch_2(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}

作者:yxc
链接:https://www.acwing.com/blog/content/31/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 位运算(1.21)
四个运算符 &,只有x,y都是1时结果是1 其余情况是0;
或 x,Y只要有一个是1结果就是1其余情况是0;
非 !
异或 x^y 相同是0 不同是1 1^1=0 0^1=1;
整形 有符号整型与无符号整型
Int 32位2进制
有符号型 ;整数 0 负数 1
1 0000000000…01
-1 100000000000…01
反码:-7
100000…111
反码 011111…000
补码;1如果是正数 正数的补码=原码
2 如果是负数 负数的补码=原码加1:011111…000+1=011111……001
左移 1<<x 01 10 100 左移就是扩大2的倍数
右移 1>>x 100 10 01 右移动就是除以2 等于删除一位 删除一位就要补一位,正数补0,负数补1;
奇数的二进制最低位是1 3的二进制是 11 5的二进制是101
偶数的二进制最低位是0 2的二进制是10 4的二进制是100
b (b&1)=1 那么b就是奇数否则b是偶数
用代码判断奇偶数
#include
using namespace std;
int main()
{

int b;
cin>>b;
if((b&1)==1)
{
	
	cout<<b<<"是奇数";
	
}
else cout<<b<<"是偶数";

return 0;

}

1ll=long long
异或运算
4^1
4=100
1=001
4^1=101(不同是1 相同是0)
树状数组
Lowbit 求某个数二进制最低位1的位置
Lowbit(1110010000)=10000
取反 0001101111
加一 0001101111+1=0001110000
和原码进行&运算 1110010000
0001110000

结果 0000010000
用代码表示就是:
#include
using namespace std;
int lowbit(int n)
{
return (~n+1)&n;
} // ~ 取反符

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值