• 随手记


    1)在计算几何中,对于整点个数的求法:

    皮尔定理:

      2S = 2a + b - 2,其中S表示多边形面积,a表示多边形内的整点个数,b位边上的整点个数;

    关于边上的整点个数求法:

      通常以边在x,y轴上的投影长度进行计算,比如某边E对应x轴长度为a,对应y轴长度为b,则E边上整点个数 b(E) = gcd(a, b)+1,我是这样想的:

        求出gcd(a, b),则有(a', b') * gcd(a, b) = (a, b),而a'与b'必为整点且互素且与(a, b)在一条边上(即不可再有满足条件的更小的整点),那么gcd(a, b)作为倍数即可表示整点个数,再加上边上的

      另一个端点即+1,就为边上的点个数;

      计算边上的整点个数时应当注意重叠问题。

    2)平方和求和公式:

       

      相关证明:https://baike.baidu.com/item/%E5%B9%B3%E6%96%B9%E5%92%8C%E5%85%AC%E5%BC%8F/3264126

      立方和公式:

       

      相关证明:https://baike.baidu.com/item/%E7%AB%8B%E6%96%B9%E5%92%8C%E5%85%AC%E5%BC%8F/10557155

     3)博弈论

      尼姆博弈:有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

        对于n堆物品,第i堆物品有ai件;

        以https://www.nowcoder.com/acm/contest/86/E为例:

      代码:

     1 #include "stdio.h" 
     2 #include "iostream"
     3 #include "algorithm"
     4 #include "math.h"
     5 #include "stdlib.h"
     6 using namespace std;
     7 typedef long long ll;
     8 int main(){
     9     //freopen("test.txt", "r", stdin);///////////////
    10     ll s[100005], n, q, op1, op2, ans;
    11     while(cin>>n>>q){
    12         ans = 0;
    13         for(int i = 0; i < n; i++){
    14             cin>>s[i];
    15             ans ^= s[i];
    16         }
    17         while(q--){
    18             cin>>op1>>op2;
    19             op1--;
    20             ans ^= s[op1];
    21             ans ^= op2;
    22             s[op1] = op2;
    23             cout<<(ans ? "Kan":"Li")<<endl;
    24         }
    25     }
    26     return 0;
    27 }

      最后ans为0,则先手必败。

     4)对于一个b进制下的一个分数p / q,判断其是否为一个有限小数的方法:

        先将其转化为一个最简分式 [即q/gcd(p, q)],若为有限小数,那么有正整数r使得 q | b^r(根据小数的计算方法),也就是说q的所有质因数都为b的质因数(因为所有数都可以用质数表示);

        最后可以用一个while实现。

    5)扩展欧几里得算法:

        求解一组正整数 (x,y)解使得对应于一对正整数(a,b)有 a*x + b*y = (a, b); 该解一定存在(贝祖等式)。

        C++代码:  

    int exgcd(int a, int b, int &x, int &y){
        if(!b){
            x = 1, y = 0;
            return a;
        }
        int q = exgcd(b, a % b, y, x); //q为最大公因数 
        y -= a/b*x;
        return q;
    }
    ////找到公因数之后回溯的同时进行逆推计算系数

    6)① a,  b为两个正整数,则2^a - 1 被 2^b - 1 除的最小非负余数为 2^r - 1,其中 r 是a 被 b除的最小非负余数:

        证明:当a < b 时 明显成立;反之,有 a = q*b + r(0 <= r <=b), 即有 2^a - 1 = 2^r((2^b)^q - 1) + 2^r - 1 = q1(2^b - 1) + 2^r - 1,

           其中 q1 = 2^r((2^b)^(q-1) + ... + 2^b + 1) 为整数,结论成立;

       ② 设 a, b 是两个正整数,则2^a - 1 和 2^b - 1的最大公因数为2^(a,b) - 1;(由欧几里得除法和)① 可得。

       ③ 则有 正整数 2^a - 1 和 2^b - 1 的最大公因数是 2^(a,b) - 1(证明:因为 (2^a - 1,  2^b - 1)= 2^(a,b) - 1 , 而2^(a,b) - 1 即 (a, b)= 1).

    7)整数分解定理:

      对于正合数 n > 1, 如果存在整数 a, b 使得 n | a^2 - b^2,但 n ト a - b,n ト a + b,

        则 (n, a-b)和(n, a+b)都是 n 的真因数(非1或n, 反证法)。

    8)素数定理:

      设 φ(x) 为不大于 x 的素数个数;

      契比谢夫不等式:当x >= 2, (ln 2 /3)*(x / ln x) < φ(x) < 6*ln 2 (x / ln x);

      素数定理:lim(x→∞)(φ(x) / (x / ln x)) = 1;

     9)为什么OSI七层模型中只有数据链路层即将传输的数据添加报尾?

    来自WikiPedia:
      - 数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。
      分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制(media access control,MAC)子层。

      也就是说数据链路层所谓倒数第二层对分组的数据添加报尾,从而形成一个帧,实现对数据的分割。接收方也可据此进行识别。

    慢慢记录。

  • 相关阅读:
    二元关系最小割
    DG观察日志传输
    [WC2007]剪刀石头布——费用流
    备库报 ORA-00313、ORA-00312、ORA-27037
    「清华集训 2017」无限之环
    The listener supports no services
    [SDOI2010]星际竞速——费用流
    ORA-16055: FAL request rejected
    [总结]网络流
    ORA-16047: DGID mismatch between destination setting and standby
  • 原文地址:https://www.cnblogs.com/zUotTe0/p/8894691.html
Copyright © 2020-2023  润新知