PTA 7-5 三足鼎立(25分)

当三个国家中的任何两国实力之和都大于第三国的时候,这三个国家互相结盟就呈“三足鼎立”之势,这种状态是最稳定的。
现已知本国的实力值,又给出 n 个其他国家的实力值。我们需要从这 n 个国家中找 2 个结盟,以成三足鼎立。有多少种选择呢?

输入格式

请添加图片描述

输出格式

在一行中输出本国结盟选择的个数。

输入样例

7 30
42 16 2 51 92 27 35

输出样例

9

样例解释

能联合的另外 2 个国家的 9 种选择分别为:

{16, 27}, {16, 35}, {16, 42}, {27, 35}, {27, 42}, {27, 51}, {35, 42}, {35, 51}, {42, 51}。

限制条件

限制条件数量
代码长度限制16 KB
时间限制400 ms
内存限制64 MB

C++代码

#include <iostream>

using namespace std;

void subheap(int a[], int i, int n) //比较父结点和子结点,在子树中生成最大堆
{
    int parent = i;
    int child = 2 * i + 1; //堆从0开始,父结点为i,则左孩子为2i+1
    while(child < n)
    {
        if(child + 1 < n && a[child] < a[child + 1]) //如果这个父结点有右孩子,并且右孩子比左孩子大
        {
            child += 1; //child的值是左右孩子中较大孩子的位置
        }
        if(a[child] > a[parent]) //如果孩子结点比父结点大,交换二者
        {
            int tem = a[child];
            a[child] = a[parent];
            a[parent] = tem;

            parent = child;
        }

        child = child * 2 + 1; //由上至下做比较
    }
}

void trip(int a[], int num) //第一趟堆排序,将最大值放到根结点的位置 //num为数组元素个数
{
    for(int i = num / 2 - 1; i >= 0; i--) // n/2+1是倒数第二排最后一个位置,也就是右下角那棵子树的根结点
    {
        subheap(a, i, num);
    }
}

void heapsort(int a[], int num) //堆排序
{
    trip(a, num);

    for(int i = num - 1; i > 0; i--)
    {
        int f = a[0];
        a[0] = a[i];
        a[i] = f; //交换根结点和最后一个元素的位置

        subheap(a, 0, i);
    }

}

/* 这个排序会有四个测试点显示超时
int trip(int a[], int left, int right) //一趟快速排序
{
    int pivot = a[left];
    while(left < right)
    {
        while(left < right && a[right] >= pivot) //left和right一直在变
        {
            right--;
        }
        a[left] = a[right];
        while(left < right && a[left] <= pivot)
        {
            left++;
        }
        a[right] = a[left];
    }
    a[left] = pivot; //此时left=right

    return left; //返回这一趟pivot的位置
}

void quicksort(int a[], int left, int right) //快速排序
{
    if(left < right)
    {
        int piv = trip(a, left, right);
        quicksort(a, left, piv - 1);
        quicksort(a, piv + 1, right);
    }
}
*/

long binarysearch(int a[], int left, int right, int p) //二分查找
{
    int num = right;
    long cnt = 0;

    for(int i = 0; i < num; i++)
    {
        int sum = a[i] + p; //和

        int dif; //差
        if(a[i] - p > 0)
        {
            dif = a[i] - p;
        }
        else
        {
            dif = p - a[i];
        }

        left = i + 1;
        right = num;

        while(left <= right) //这里要有等号
        {
            int mid = (left + right) / 2;

            if(a[mid] >= sum)
            {
                right = mid - 1;
            }
            else //没有else,left<=right一直成立,死循环
            {
                left = mid + 1;
            }
        }

        int high = right;

        left = i + 1;
        right = num;
        while(left <= right)
        {
            int mid = (left + right) / 2;

            if(a[mid] <= dif)
            {
                left = mid + 1;
            }
            else
            {
                right = mid - 1;
            }
        }

        int low = left;

        int tem = high - low + 1;
        cnt += tem;
    }

    return cnt;
}

int main()
{
    int n, p;
    cin >> n >> p; //其他国家的个数n 本国的实力值p

    int sv[n]; //n个国家的实力值
    for(int i = 0; i < n; i++)
    {
        int a;
        cin >> a;
        sv[i] = a;
    }

    heapsort(sv, n);
    //quicksort(sv, 0, n - 1); //数组索引从0开始

    //sort(sv, sv + n); //sort不超时

/* 暴力破解会超时
    int cnt = 0; //记录符合条件的组合数量
    for(int i = 0; i < n - 1; i++)
    {
        int sum = sv[i] + p;
        int dif;
        if(sv[i] - p > 0)
        {
            dif = sv[i] - p;
        }
        else
        {
            dif = p - sv[i];
        }

        for(int j = i + 1; j < n; j++)
        {
            if(sv[j] < sum && sv[j] > dif)
            {
                cnt++;
            }
        }
    }

    cout << cnt;
*/

    cout << binarysearch(sv, 0, n - 1, p);

    return 0;
}

运行结果

请添加图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
物理学在迅速发展,不断地揭示新的现象和规律,征服新的领域,还向 相邻的学科交叉渗透,并在高新技术园地里开花结果.这就促使大学基础物理 课程作相应的改革,以适应科学发展的新形势.值此新旧世纪交替之际,广大 物理学工作者和教师所面临的一项重大挑战,乃是写出一本面向21 世纪的大 学物理教材. 卢德馨教授曾从事理论物理的科学研究多年,取得了第一手的科研经验, 有良好的物理素养.近年来他主持了南京大学基础学科教学强化部的工作,并 承担了其中大学物理学的教学任务,致力于基础物理学课程的教学改革.他对 此深思熟虑,自有一套创新性的见解,而且有足够的能力和毅力,将这些概 念付诸实践.这本书就是他多年教学经验的结晶,既新颖可喜,又脚踏实地, 是一本优秀的基础物理学课程的教材. 基础物理学改革的浪潮是全球性的,持续了好几十年,既有成功的经验, 也有失败的教训.理论物理大师费曼(R.P.Feynman)的例子就是颇有启发性 的:他于60 年代初介入了大学基础物理的教学改革,曾在美国加州理工学院 教过大学一、二年级的物理课程.称著于世的三大卷《费曼物理讲义》就是这 段经历的见证.他对于物理学的许多方面做出了富有创造性的重大贡献,随之 而来的是他对物理学的透彻洞见和精辟理解.他在上物理课时,若天马行空, 纵横驰骋;即物穷理,多蕴妙悟;且谈笑风生,挥洒自如.以此,这部讲义对 广大物理工作者和教师,深富启迪和教益,成为被引证最多的一部物理著作, 在物理学界产生广泛的影响.从这个意义上来说,这个教改的尝试是成功的. 但是应该看到事物的另一面:这本讲义,陈意过高,使得刚入大学的学生难 以掌握,因而不适宜作为实际施教的教科书.可以这么说,这是一本为教师而 写的,而不是为学生而写的教科书.对学生来说,显得高不可攀,难以理解其 底蕴.作为教材,在可接受性上出了问题.随之而来的多卷本《伯克莱物理教 程》虽在可接受性上略有改进,但仍有问题.因而可接受性成为了评衡教材的 另一重要标准.瑞斯尼克(R.Resnick)与哈立德(D.Halliday)的《物理学》 虽然没有费曼那样高的独创性,但稳打稳扎,更贴近于传统教材,可接受性 良好,受到广大教师的青睐,遂成为美国应用最广泛的大学物理学教材.革新 性教材的另一个问题,是由于要增加很多新的内容所引起的.适应科学发展的 需要,必然要增添许多反映新的进展的内容,而作者往往喜新不厌旧,对于 传统的内容舍不得抛弃,结果就会使教材的内容臃肿,篇幅浩繁,也不利于 施教. 本书作者力图推陈出新,变革教材的陈旧面孔.在这一点上,显然受到费 曼的影响,但是他并不沿袭费曼的具体做法,而是有自己的新意.例如在第四 章,他采用透视历史的方法来引入万有引力定律,娓娓道来,引人入胜.然后 讨论了引力的现代问题,诸如引力质量与惯性质量的等同性,引力红移和引 力塌缩等,和物理学的前沿相衔接;然后再回过来处理二体开普勒问题的理 论,使得学生能切实地掌握相应的理论方法.整章读下来,从历史到现实,从 概念到理论,有融会贯通的乐趣.又如在第二十七章叙述玻色-爱因斯坦统计 之后,紧接着引入最新的实验结果来讨论玻色-爱因斯坦凝聚问题,使学生不 是单纯被动地接受一些知识,而是置身于物理学发展的动态环境之中,有身 历其境之感,培养了学生对物理学的参与意识. 本书作者一方面对创新下了不少功夫,同时清醒地意识到可接受性的重 要.篇章的顺序是力学——热物理——电磁学——近代物理,大体上符合循序 渐进的教学原则,不会使学习者产生太大的跳跃和脱节的感觉.本书作者也注 意到学生容易犯错误的地方,例如在教矢量的地方,着重提醒哪些表达式是 非法的,这一细节反映出作者是一位经验丰富的教师.另外全书的篇幅控制在 600 页左右,使得这一教材可以游刃有余地在180 小时课堂教学中完成,避 免了篇幅过大的毛病. 这本教材自1989 年起即在南京大学强化部大学物理学课程中试用,1993 年起又用于南京大学天文系的学生.历次教学的效果良好:它激发了学生对物 理学的兴趣,也培养了思考物理学问题的能力,这从学生们所做的小论文工 作取得良好成绩得到了验证.当然,强化部的学生素质较高,也为这一教学改 革顺利进行提供了良好的条件.总之,这是一本令人耳目一新、适于实际施教 的大学物理学教材,值得向物理教学界推荐. 冯端 1996 年10 月 前言 本书是作者在南京大学基础学科教学强化部讲授的“大学物理学”课程 基础上写成的.强化部有天文、物理、生物物理、化学、生物、生物化学等学 科方向.“大学物理学”作为一门公共基础课,很难根据现有的“本系”或“外 系”教材来讲授.因此需要一本全新构思的书.普通物理教科书的基本内容往 往仍然是以17 世纪、19 世纪的为主,这在世纪之交是很不适宜的.学制的缩 短、双休日制度的实施使课时过多的矛盾更加突出.作者尝试撰写一本以20 世纪内容为主导的教科书,篇幅适合两个学期的课程,希望能够作为多个学 科学生的公共基础课教材. 从当前科学发展的趋势看,学科的交叉、渗透相当普遍.在教材中努力体 现这种倾向是值得尝试的.在本学科中各支间的关联以至融会贯通也是应 该强调的.当然寻求物理学与其它学科、物理学各支间的“枝连”是颇为艰 难的事.再者作者本人相信前沿课题应该在基础内容中有其“根”,寻根的工 作也是相当艰难的.但是一旦发现前沿课题中有适合基础教学的内容,则务求 能纳入教材.希望这种搜索寻根的工作使教材更为丰满、充实.实际研究工作 者的思路、方法对于初学者来说是很有价值但又难以获得的.例如在研究工作 中如何获取和处理信息、处理好数学和物理的关系、不断调整研究步骤、深 入理解结果的意义、扩大成果等等,本书试图通过实际问题向读者展示. 传统的基础课强调基础知识、基本理论和基本技能.实践证明完全可能通 过课程达到进一步的目标:培养学生的探索精神和创造精神.可以通过历史、 展示现实作出示范.同时还可以创造条件使学生有向内容的深度和广度发展 的余地.讲授应该不局限于一本教材,提倡开放式.本书引用一定数量的文献 和参考书,展示一些悬而未决的问题,都是基于这种考虑.列出的一些经典文 献和专业文献主要是供给教师研究用.标有*的节和段落可以作为参考内容. 在本书的辅助材料电子版中列举了作者对题解、文献阅读、课程论文等环节 的观点并包含了有关参考材料. 基于以上考虑,本书的选材、表达不同以往.例如光学和电路没有纳入; 提出了不少新的观点和处理问题的方式;尝试对物理定律的美学价值进行思 考等等.读者可以见仁见智,加以评论.本书写出初稿已有8 年了,首次在教 材建设组披露部内容也已有4 年.但是仍不能臻于理想,错误、不当仍然难 免. 成书过程中曾先后得到陈祖福、冯端、冯致光、江元生、许敖敖、邓崇 光诸位的鼓励和支持.作者还得到江元生、梁昆淼、陈廷扬、黄天衣、沈健、 赵其昌、潘大谦诸君不少有益的意见和帮助.冯端先生通读全书、作序,对内 容的调整和增补提出了宝贵的意见,使我获益非浅.在此一并表示感谢.我的 助教和学生在教和学的过程中对本书的形成起了重要作用,石名俊选编了部 习题。希望本书能唤起他们美好的回忆. 卢德馨 1996 年10 月于南京 第一章 绪论 §1.1 什么是物理学 物理学是研究自然界基本规律的科学.它的英文词physics 来源于希腊 文,原义是自然,而中文的含义是“物”(物质的结构、性质)和“理”(物 质的运动、变化规律).中文含义与现代观点颇为吻合.现代观点认为物理学 主要研究:物质和运动,或物质世界及其各部之间的相互作用,或物 质的基本组成及它们的相互作用. 物质可以小至微观粒子— — 子、原子以至“ 基本” 粒子 (elementaryparticles).所谓基本粒子,顾名思义是物质的基本组成成, 本身没有结构.然而基本与否与人们的认识水平以及科学技术水平有关,因此 对“基本”的理解有阶段性.有鉴于此,物理学家简单地称之为“粒子”.有 时为了表达认识的层次,我们仍然可以说:“现阶段的基本粒子为⋯⋯”. 当前我们认为基本粒子有轻于(lepton)、夸克(quark)、光子(photon) 和胶子(gluon)等等.科学家们正在努力寻找自由夸克.此外,数电荷、磁 单极也在寻找之列.我们周围的物体是物质的聚集状态.人们可以用自己的感 官感知大多数聚集状态的物质,并称它们为宏观( macroscopic)物质以区别 前面所说的微观(microscopic)粒子.居间的尺度是介观(mesoscopic), 而更大的尺度是宇观(cosmological).场(field)传递相互作用,电磁场 和引力场就是例子. 在物理学的范围内,物质的运动是指机械运动、热运动、微观粒子的运 动、原子核和粒子间的反应等等.运动总是发生在一定的时间和空间.时间和 空间首先是作为物质运动的舞台,但最后也成了物理学研究的对象. 现在知道物质之间的相互作用有四种,即万有引力、弱相互作用、电磁 相互作用和强相互作用. 爱因斯坦(A.Einstein,1879—1955)生前曾致力于统一场论的工作, 试图用统一的理论来描述各种相互作用.在60 年代,走向统一有了突破性的 进展.格拉肖(S.L.Glashow)、温伯格(S.Weinberg)和萨拉姆(A.Salam) 等人发现弱相互作用和电磁相互作用可以统一, 用弱电相互作用 (electroweak)来描述.鲁比亚(1983[1],C.Rubbia)等提供了实验支持. 大统一理论(Grand Unification Theory,GUT)试图将强相互作用也统一进 去,而超对称理论更企图将引力也纳入其中.还有人在寻求其他的相互作用. 对此,在Physics Teacher 期刊上曾有一篇文章题为“存在第五种基本力吗?” 专门讨论这一命题[6].在高级的理论中,相互作用只不过是交换物质,如电 磁作用交换光子、强作用交换胶子. 物理学的一个永恒主题是寻找各种序(orders)、对称性(symmetry) 和对称破缺(symmetry-breaking)[10]、守恒律(conservation laws)或 不变性(invariance).物质的有序状态比我们想象的要广泛得多.除了排列 整齐的位置序以外,还可以有指向序.超导态也是一种有序状态.对称性通常 指静止的空间几何对称,如太极图、八卦、晶体中的平移和旋转对称.实际上, 对称性还可以是动态的,可以是时间反演对称、物质—反物质对称以及更为 抽象的规范对称等等. 就物理学和其他科学的关系而言,我们可以说: ·物理学是最基本的科学. ·物理学是最古老、发展最快的科学. ·物理学提供最多、最基本的科学研究手段. 最基本的体现是在天文学、地学、化学、生命科学中都包含着物理过程 或现象.在这些学科中用到不少物理学概念和术语是很自然的.最基本还意味 着任何理论都不能和物理学的定律相抵触.例如,如果某种理论破坏能量守恒 定律,那么这一理论就很成问题.当然,某些物理理论本身或一些阶段性的工 作本身也是在不断地完善. 19 世纪中叶之前,物理学曾是完完全全的实验科学.力学中的理论问题 被认为是数学家的事.19 世纪末,在当时处于世界物理学中心的德国的大学 里,开始设置理论物理学教授的席位.此后,随着人类的认识能力逐步深入, 逐步深入到不能靠直觉把握的微观、高速、宇观现象,20 世纪初建立了狭义 和广义相对论,以及量子力学这些深刻的物理理论.到了20 世纪中叶,物理 学已经成为实验和理论紧密结合的科学.20 世纪后半叶由于电子计算机的发 展,既改变了理论物理的工作方式,也扩大了实验的涵义.目前物理学已经 成为实验物理、理论物理、计算物理三足鼎立的科学.实验提供的条件比 自然界出现的更富变化和更灵活可控,而物理理论则给出了对自然界的数学 描述.计算物理学是重要的新支,有自己独特的研究方法.计算机实验可以 提供比通常的实验更为变化丰富和灵活控制的条件.不过通常需要用到超级 计算机. 物理学中最重大的基本理论有下面5 个: ·牛顿力学或经典力学(Mechanics)研究物体的机械运动; ·热力学(Thermodynamics)研究温度、热、能量守恒以及熵原理等等; ·电磁学(Electromagnetism)研究电、磁以及电磁辐射等等; ·相对论(Relativity)研究高速运动、引力、时间和空间等等; ·量子力学(Quantum mechanics)研究微观世界. 后两个理论主要是在20 世纪发展起来的,通常认为是现代物理学的核心. 以上理论中没有一个被完全推翻过,也没有一个是永远正确的.例如,牛顿力 学在高速情形下,应该用狭义相对论来代替;而对于强引力,它又偏离于广 义相对论,但在它的适用范围内仍然是精确的.科学的理论总是要发展的,需 要根据新发现的事实进行修正.在教科书中只介绍一种版本的做法很可能导 致“理论是唯一的”这样的观念.事实上,理论决不是唯一的.科学理论往往 在美学上令人赏心悦目,在数学上优雅而普适,但是仅仅有这些是决不可能 流传下来的.理论和思想必须经受实验的检验和验证.物理学中的理论和实验 在相互促进和丰富中得到发展. 一个没有思想的实验工作者可以发现无穷无尽的事实,不过毫无用处. 理论家如果不受实验检验这一约束也可能产生出极其丰富的思想,不过与大 自然毫无关系而已. 通常的科学研究方法是: ·通过观测、实验、计算机模拟得到事实和数据; ·用已知的可用的原理析这些事实和数据; ·形成假说和理论以解释事实; ·预言新的事实和结果; ·用新的事例修改和更新理论. 上述的后3 步都是关于理论的.以上所说的科学研究的步骤是常规的.有 时候,有的人可能并不遵循这样的过程.常常直觉(intuition)或者预感 (premonition)会起相当的作用.有时候,机遇(运气或偶然)对于成功也 会起作用,使你获得一则重要的信息或发现一个特别简单的解.要学会在恰当 的时机提出恰当的问题,并找到问题的答案.有时还必须忽略一些“事实”, 原因是这些并不是真正的事实或者它们无关紧要、自相矛盾;或者是由于它 们掩盖了更重要的事实或考虑它们使问题过于复杂化.据说,有一次有人问爱 因斯坦:如果迈克耳孙-莫雷(Michelson-Morley)实验并不导致光速不变你 怎么办?他说:他将忽略那些实验结果,他已经得到了结论,光速必须被认 为是不变的.关于爱因斯坦1905 年提出狭义相对论时是否知道迈克耳孙-莫 雷实验,曾发生过长时间的争论.有人认为爱因斯坦在他的著作中没有留下他 知道迈克耳孙-莫雷实验的丝毫痕迹,他可能纯粹通过理论推理和他们(迈克 耳孙与莫雷)得出了相同的结论.爱因斯坦的首席传记作家培斯(Abraham Pais)筛选了许多历史记载,得出结论说,爱因斯坦确实知道这一实验.新近 有一篇爱因斯坦在1922 年的演说的英文翻译稿刊登在Physics Today 上[8]. 此文是根据原来的德语演讲的日文记录整理、翻译的[见第九章参考文献 (13)].译者让爱因斯坦“本人”表示,他知道这一实验. 在大学物理的学习中,除了学习事实、定律、方程和解题技巧外,还必 须努力从整体上掌握物理学.要了解各支间的相互联系.现代观点认为,应 该从整体上逻辑地、协调地来把握物理学.学习中,对于基本物理定律的优美、 简洁、和谐以及辉煌应该有所体会,要学会鉴赏其普适程度,了解其适用范 围.还要学会区别理论和应用,物理思想和数学工具,一般规律和特殊事实, 主要和次要效应,传统的和现代的推理方式等等.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值