1.4604. 集合询问
利用二进制---->判断该数每个数位的奇偶性
询问操作:如果 s的第 i位为 0,则 x 的第 i位必须为偶数,如果 s的第 i位为 1,则 x的第 i位必须为奇数。
scanf("%s",str);
int x=0;
for(int i=0;str[i];i++)
x=x*2+str[i]%2;//x*2表示跳到x的二进制表示下一位,str[i]%2表示判断该位的奇偶性
2.2005. 马蹄铁
利用向量偏移量----->坐标的上下左右移动
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};//表示坐标偏移量:上下左右
for (int i = 0; i < 4; i++)
{
int a = x + dx[i], b = y + dy[i];
}
3.4872. 最短路之和
在图中删点不好做,逆向思维,把点一个一个加入图中
4.邻接表一定要记得初始化!!!!
int h[N], w[M], e[M], ne[M], idx;
memset(h,-1,sizeof h);
5.C++ 保留N位小数的方法
#include <iomanip>
...
cout<<fixed<<setprecision(n)<<shu; //shu就是你要保留小数的数字;n为保留小数的位数
...
6.两数相减可能为正,可能为负------>通过取模统一化为正
((a-b)+n)%n
7.判断序列中该数出现的次数
if(upper_bound(a+1,a+n+1,a[i])-lower_bound(a+1,a+n+1,a[i])<=n)//二分求个数
//n为出现的次数