数学知识四

容斥原理

S表示面积,下面公式可求出不相交的面积

2个圆的公式是这样

4个圆的面积是

总面积-所有俩俩相交的面积+所有三三相交的面积-四四相交的面积,公式里加和减互相出现。

从n个集合里面挑一个一直到从n个集合里面挑n个

1-10中,能被2,3整除的数是下面打勾的

p能整除n的个数,是n/p

p不能整除n的个数是n/p取整

这里共有2的n次方-1项

从n个集合当中选若干个集合,所有的选法都在上述公式中,每种选法的符号跟我们所选取的奇偶数有关,我们用位来表示,如果某位为0,则代表没有选,为1,则代表被选。

其他博主写的比较好的题解

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N = 20;
int n, m;
int p[N];
int main()
{
    cin >> n >> m;
    for (int i = 0; i < m; i++) cin >> p[i];//把5个质数读进来
    int res = 0;
    //从1开始枚举到2的m次方,即枚举了2的m次方-1个数
    //这里把2的m次方写成了位运算的格式
    for (int i = 1; i < 1 << m; i++)
    {
        int t = 1, cnt = 0;
        for (int j = 0; j < m; j++)//判断每位是否为1
            if (i >> j & 1)
            {
                cnt++;
                if ((LL)t * p[j] > n)//如果t*p[j]>n就不用算了
                {
                    t = -1;
                    break;
                }
                t *= p[j];
            }
        if (t != -1)//此时说明这几个的乘积小于等于n
        {
            if (cnt % 2) res += n / t;//奇数个集合是加,偶数个集合是减
            else res -= n / t;
        }
    }
    cout << res << endl;
    return 0;
}

博弈论

先手必败状态:对方必应。

先手必胜状态:自己拿完之后,对手再拿,对手必输。

这里是异或

如果异或值不是0,我们可以从某一堆中拿走一些石子,让剩下的值异或变成0,即先拿的可以决定后拿的结果。

若最开始的异或值是0,则先手的结果一定是0,后手的结果就不是0,即先手拿到的永远是0,后手拿到的永远不是0.

Nim游戏

int main()
{
    int n;
    int res = 0;
    scanf("%d", &n);
    while (n--)
    {
        int x;
        scanf("%d", &x);
        res ^= x;
    }
    if (res) puts("Yes");
    else puts("No"); 
    return 0;
}

集合——Nim游戏

集合1,2,3中找出的是0

SG函数

任何非0的状态都能到0,任何0状态到不了0状态,

如果当前所有局面异或起来不是0,我们可以把它变成0,如果是0,我们都可以让他不是0

下面这个例子限定了每次取石子的个数

即有3个堆,分别有2,4,7个石子,每次取得时候只能取2个或5个,如果取 不到就失败

假如只有一堆,而且这一堆有10个,每次只能取2或5,每次取完后得结果可以这样表示

参考题解

【ACWing】893. 集合-Nim游戏_记录算法题解的博客-CSDN博客

(1条消息) [AcWing] 893. 集合-Nim游戏(C++实现)博弈论SG函数模板题_Cloudeeeee的博客-CSDN博客_博弈论c++

#include<cstring>
#include<unordered_set>
const int N = 110, M = 10010;
int n, m;
int s[N], f[M];//  s存能取哪些个数的石子,f表示sg得值。
int sg(int x)
{
    if(f[x]!= -1) return f[x];//记忆化搜索,每个状态只计算一次
    unordered_set<int> S;//用哈希表存储可以到达得局面
    for (int i = 0; i < m; i++)
    {
        int sum = s[i];
        if (x >= sum)//如果当前数的个数大于等于sum,也就是能取,如要取俩个石子,当前总共有8个,8>=2;
            S.insert(sg(x - sum)); // 将新的状态加进来
    }
    for (int i = 0;; i++)// 找出集合当中不存在的最小值并返回
        if (!S.count(i))//如果当前这个数不存在,直接返回
            return f[x] = i;
}
int main()
{
    cin >> m;
    for (int i = 0; i < m; i++) cin >> s[i];
    cin >> n;
    memset(f, -1, sizeof f);
    int res = 0;
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        res ^= sg(x);
    }
    if (res) puts("Yes");
    else puts("No");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 初中数学知识图谱RDF是指使用RDF(Resource Description Framework)技术构建的初中数学知识图谱。 初中数学知识图谱RDF的构建可以利用数学学科的相关概念和知识来描述数学知识之间的关系和属性。借助RDF技术,可以使用三元组(主谓宾)的方式来表示数学知识的基本要素,包括概念、定义、定理、公式等。 初中数学知识图谱RDF可以包括以下内容: 1. 数学概念:表示数学学科的基本概念,如数字、形状、比例等。 2. 定义和性质:描述数学概念的定义和性质,例如边形的定义和性质,直角三角形的定义和性质等。 3. 公式和定理:用数学公式和定理来表示数学中的重要关系和结论,如勾股定理、二次方程的解法等。 4. 推导和证明:使用推导和证明的过程来解释数学中的推理和解题方法,包括数学归纳法、推理法则等。 通过初中数学知识图谱RDF的建立和应用,可以实现数学知识的形式化表示和机器的理解。这样,可以为学生提供更精确和全面的数学知识,帮助他们更好地理解数学概念和方法,以及解决数学问题的能力。同时,还可以支持数字化教学和在线教育平台的发展,提供个性化的学习资源和智能化的学习辅助工具。 ### 回答2: 初中数学知识图谱RDF是指将初中数学知识图谱(Knowledge Graph)表示为RDF(Resource Description Framework)格式的一种方法。RDF是一种用于描述和表示信息的语义网技术,它使用三元组(主语-谓语-宾语)的数据结构来表示知识之间的关系。 在初中数学知识图谱RDF中,主语可以是任何一个数学概念或知识点,谓语可以表示该知识点之间的关系,而宾语则表示与该知识点相关的具体信息或其他知识点。 例如,我们可以将"平行线"这个数学概念表示为一个主语,并使用谓语表示与之相关联的其他概念或属性。例如,我们可以使用谓语"定义"来连接“平行线”与其定义的相关知识点的关系。而宾语则可以是该定义的具体内容,如“在同一个平面内,任意两条不交叉的直线称为平行线”。 通过使用RDF表示初中数学知识图谱,我们可以更好地组织和表示数学知识之间的关系,从而为学生提供更系统化、可查询和跟踪的学习资源和工具。初中数学知识图谱RDF可以帮助学生更好地理解数学概念之间的联系,发现知识点之间的逻辑关系,并能够更有针对性地进行学习和练习。同时,它也可以为教师提供更多的教学资源和指导,帮助他们更好地进行教学规划和评估学生的学习进展。 总之,初中数学知识图谱RDF是一种用于表示初中数学知识图谱的技术,通过使用RDF格式,可以更好地组织和表示数学知识之间的关系,为学生和教师提供更好的学习和教学资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发没有代码多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值