[转]一些乱七八糟的东西

总结一些乱七八糟的东西

NOIp注意事项

转自Redbag的博客

  • set
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    begin()//返回指向第一个元素的迭代器
    clear()//清除所有元素
    count()//返回某个值元素的个数
    empty()//如果集合为空,返回true
    end()//返回指向最后一个元素的迭代器
    equal_range()//返回集合中与给定值相等的上下限的两个迭代器
    erase()//删除集合中的元素
    find()//返回一个指向被查找到元素的迭代器
    get_allocator()//返回集合的分配器
    insert()//在集合中插入元素
    lower_bound()//返回指向大于(或等于)某值的第一个元素的迭代器
    key_comp()//返回一个用于元素间值比较的函数
    max_size()//返回集合能容纳的元素的最大限值
    rbegin()//返回指向集合中最后一个元素的反向迭代器
    rend()//返回指向集合中第一个元素的反向迭代器
    size()//集合中元素的数目
    swap()//交换两个集合变量
    upper_bound()//返回大于某个值元素的迭代器
    value_comp()//返回一个用于比较元素间的值的函数

  • 求最大公约数(GCD)
    1
    2
    3
    4
    5
    int gcd(int A,int B)
    {
    if (B==0) return A;
    return gcd(B,A%B);
    }

  • 位运算
    • “&”:相同位的两个数字都为1,则为1;若有一个不为1,则为0。
    • “|”相同位只要一个为1即为1。
    • “^”相同位不同则为1,相同则为0。
    • “<”左移,相当于*2
    • “>”右移,相当于/2
    • “~”取反,1变0,0变1。

  • strlen();求字符串长度,substr()用法。
    1
    2
    3
    4
    5
    6
    7
    int main()
    {
    string s="ABAB";
    cout << s.substr(2) <<endl ; //输出AB
    cout << s.substr(0,2) <<endl ; //同上
    cout << s.substr(1,2) <<endl ; //输出BA
    }

  • getline(cin,s);字符串s读到行结束,getline(cin,s,’#’);//一直输入,按#结束

  • 1
    2
    3
    4
    5
    6
    7
    size(); //返回实际个数
    empty(); //判断是否为空
    push(item); //压栈
    top(); //返回栈顶元素
    pop(); //将栈顶元素删除
    s1.swap(s2); //将两个栈元素交互
    s1 == s1; //判断是否相等

  • sqrt(sqr(b[x][1]-b[y][1])+sqr(a[x][2]-a[y][2])),2点之间距离公式

  • 逆元 :
    • 1)线性
      inv[i]=(p-p/i)*inv[p%i]%p;
      p:质数且i>1 (inv[1]=1)
    • 2)费马小定理
      inv[i]=i^(p-2)%p
      p:质数