`
Simone_chou
  • 浏览: 192971 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

士兵杀敌(容斥定理)

    博客分类:
  • NYOJ
 
阅读更多

士兵杀敌(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。

小工是南将军手下的军师,南将军现在想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。

注意,南将军可能会问很多次问题。

 
输入
只有一组测试数据
第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示南将军询问的次数(1<M<100000)
随后的一行是N个整数,ai表示第i号士兵杀敌数目。(0<=ai<=100)
随后的M行每行有两个整数m,n,表示南将军想知道第m号到第n号士兵的总杀敌数(1<=m,n<=N)。
输出
对于每一个询问,输出总杀敌数
每个输出占一行
样例输入
5 2
1 2 3 4 5
1 3
2 4
样例输出
6
9

   思路:给出一个N(1到1000000)大小的数组,有M(1到100000)次询问,每次询问A到B的总和。

 TLE:

 

#include<stdio.h>
#define MAX 1000000+5
int number[MAX];
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	 scanf("%d",&number[i]);
	while(m--)
	{
		int a,b;
		int sum=0;
		scanf("%d%d",&a,&b);
		for(int i=a;i<=b;i++)
		 sum+=number[i];
		printf("%d\n",sum);
	}
	return 0;
}

 用最传统简单的方法解无疑会超时。

小改进一下就可以AC:

#include<stdio.h>
#define MAX 1000000+5
int number[MAX];
int main()
{
	int n,m;
	scanf("%d%d",&n,&m);
	number[0]=0;
	for(int i=1;i<=n;i++)
	 {
	  scanf("%d",&number[i]);
	  number[i]+=number[i-1];
         }
//number数组不代表i士兵的杀敌数,代表从1到i总共的杀敌数
	while(m--)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		printf("%d\n",number[b]-number[a-1]);
//若求2到9的杀敌数
//number[9]代表1到9总共的杀敌数,number[1]代表1号的杀敌数
//那么number[9]-number[1]则代表2到9的杀敌数
	}
	return 0;
}

    这种计算方法运用到一种思想:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。还有一种做法是运用树状数组。

    总结:题目虽然简单,但是也有运用到新的算法去解决。多接触,多变通。

分享到:
评论

相关推荐

    组合数学- 容斥定理.rar

    在更复杂的场景下,容斥定理可以扩展到更高级的形式,如多级容斥、容斥原理的递推公式等。在实际应用中,通常需要巧妙地构造集合,以适应具体问题的需求。此外,容斥定理也可以与其他数学方法结合,比如鸽巢原理、...

    小五数学第7讲:容斥定理(教师版)..docx

    【容斥定理】是组合数学中的一个重要概念,它用于计算不同类别元素的总数。容斥原理的基本思想是,当你需要计算至少属于一类的元素总数时,应当将所有类别的元素数量相加,然后减去那些同时属于两个类别的元素数量,...

    小五数学第7讲:容斥定理(学生版)..docx

    【容斥定理】是数学中的一个重要概念,用于计算不同类别元素的数量总和。它涉及到集合的交集和并集的运算,可以帮助我们避免重复计数。本篇内容主要介绍了两个核心知识点:两集合容斥定理和三集合容斥定理。 **两...

    容斥原理与鸽巢原理ppt

    【容斥原理与鸽巢原理】是解决计数问题中的两个重要工具,它们在数学,尤其是组合数学领域中有着广泛的应用。容斥原理提供了一种间接计数的方法,而鸽巢原理则是处理有限空间和对象分配问题的基础。 **容斥原理**的...

    容斥定理求解电网络邻接矩阵可靠性

    输入为有向的邻接矩阵C、以及电源、变换器、开关、储能的可靠性参数 路径搜索基于深度优先搜索,不包含在本程序内

    容斥原理理论和鸽巢原理

    容斥原理和鸽巢原理是组合数学中的两个基础概念,它们在解决计数问题时起着关键作用。容斥原理,又称包含-排除原理,主要用来计算有限集合中某些特定属性元素的个数,尤其在处理重叠子集时特别有效。而鸽巢原理,又...

    容斥原理 - 张坤龙1

    容斥原理,也被称为Inclusion-Exclusion Principle,是组合数学中的一个重要概念,用于精确计算在给定条件下的元素数量。这个原理常用于处理多个集合的并集与交集问题,尤其是在存在重叠元素的情况下。 首先,让...

    排列组合之容斥原理PPT

    容斥原理是排列组合中的核心定理之一,它帮助我们精确地计算出同时满足多个条件的元素个数。在本PPT中,容斥原理通过一系列示例和练习得到了深入的探讨。 首先,我们来看容斥原理的基本形式。假设我们要计算满足A、...

    容斥原理与鸽巢原理PPT教案学习.pptx

    综上所述,容斥原理与鸽巢原理以及De Morgan定理是理解集合论和组合计数的基础,它们在处理包含关系、求解元素数量以及逻辑关系分析等方面发挥着关键作用。通过学习这些原理,我们可以更有效地解决涉及集合操作的...

    容斥原理解N以下的素数个数

    容斥原理,也被称为Inclusion-Exclusion Principle,在数学中是一种强大的计数工具,尤其在组合数学中用于计算集合元素的总数。这个原理的核心思想是当我们想要计算一个总集合的元素数量时,需要考虑所有子集的贡献...

    戴维南定理与诺顿定理Multisim仿真源文件

    《戴维宁定理与诺顿定理在Multisim中的仿真应用》 戴维宁定理和诺顿定理是电路分析中的两个重要定理,对于理解和简化复杂电路问题有着重要作用。这两个定理分别提供了等效电源的概念,使得电路分析更为简便。本资料...

    关于容斥原理的一些注记 (1985年)

    论文中还引入了引理和定理来详细推导容斥原理及其推广。例如,引理1讨论了特定条件下的集合运算结果,而定理1则给出了一般情况下,由集合A中恰属于A1, ..., An中的γ个集合的元素所组成的集合的大小计算公式。 此外...

    戴维南定理和诺顿定理实验_模板

    **戴维南定理与诺顿定理** 戴维南定理和诺顿定理是电路理论中的两个重要定理,它们主要用于简化复杂电路的分析,特别是对于一端口网络的研究。这两个定理都用于建立电路的等效模型,使得在处理包含独立电源、线性...

    勾股定理的逆定理.doc

    **勾股定理的逆定理**是几何学中的一个重要概念,它与勾股定理密切相关。勾股定理是直角三角形的基本性质,即在一个直角三角形中,直角边的平方和等于斜边的平方。具体来说,如果直角三角形的三边长分别为a、b和c,...

    stolz定理(数学分析 定理证明)

    Stolz定理是数学分析中的一个重要工具,主要用于处理极限问题,特别是在处理0/0型或∞/∞型不定式时。这个定理提供了一种转换这类不定式为更简单的形式,进而求解其极限的方法。以下是Stolz定理的详细解释、证明及其...

    实验三 叠加定理、戴维南定理的验证

    实验三主要围绕线性电路中的两个重要定理——叠加定理和戴维宁定理进行验证。这两个定理是电路理论中的基础概念,对于理解和分析复杂电路有着至关重要的作用。 **叠加定理**是线性电路分析的一个基本法则,它表明在...

    中值定理的应用和推广

    ### 中值定理的应用和推广 #### 摘要 本文首先介绍了微分中值定理的基础知识,随后探讨了微分中值定理的实际应用,并对比分析了几种不同的中值定理之间的异同点。最后,文章进一步讨论了如何将微分中值定理推广到...

    奈奎斯特定理和香农定理1

    奈奎斯特定理和香农定理是通信理论中的两个基本定理,它们对理解和优化数据传输系统至关重要,尤其在现代网络和数据库通信中扮演着关键角色。 奈奎斯特定理,也称为奈氏准则,它主要关注的是在理想低通信道条件下的...

    戴维南定理和叠加定理

    **戴维南定理**是电路分析中的一个重要理论,它指出任何线性的有源二端网络,对于外部电路而言,可以等效为一个电压源E(开路电压UOC)和一个电阻RO的串联组合。这个电压源的电压E等于二端网络在没有外部负载时两端...

Global site tag (gtag.js) - Google Analytics