求助一道C++信息学题目

版权声明:本文为博主原创文章,遵循 版权协议,转载请附上原文出处链接和本声明。

接下来这些蛇将进行决斗,决斗将持续若干轮,每一轮实力最强的蛇拥有选择权,可以选择吃或者不吃掉实力最弱的蛇:

1.如果选择吃,那么实力最强的蛇的体力值将减去实力最弱的蛇的体力值,实力最弱的蛇被吃掉,退出接下来的决斗。之后开始下一轮决斗。

2.如果选择不吃,决斗立刻结束。

每条蛇希望在自己不被吃的前提下在决斗中尽可能多吃别的蛇(显然,蛇不会选择吃自己)。

现在假设每条蛇都足够聪明,请你求出决斗结束后会剩几条蛇。

本题有多组数据,对于第一组数据,每条蛇体力会全部由输入给出,之后的每一组数据,会相对于上一组的数据,修改一部分蛇的体力作为新的输入。

第一行一个正整数 T,表示数据组数。

第一行第一个非负整数 k 表示体力修改的蛇的个数。

第二行 2k 个整数,每两个整数组成一个二元组 (x,y),表示依次将 ax的值改为 y。一个位置可能被修改多次,以最后一次修改为准。

输出 T 行,每行一个整数表示最终存活的蛇的条数。

第一组数据,第一轮中 3 号蛇最强,1 号蛇最弱。若 3 号蛇选择吃,那么它将在第二轮被 2 号蛇吃掉。因此 3 号蛇第一轮选择不吃,3 条蛇都将存活。

对于第二组数据,3 条蛇体力变为 5,6,25。第一轮中 3 号蛇最强,1 号蛇最弱,若它选择吃,那么 3 号蛇体力值变为 20,在第二轮中依然是最强蛇并能吃掉 2 号蛇,因此 3 号蛇会选择两轮都吃,最终只有 1 条蛇存活。

对于 40%的数据:n≤10。

对于 100%的数据:3≤n≤106,1≤T≤10,0≤k≤105,0≤ai,y≤109。保证每组数据(包括所有修改完成后的)的 ai 以不降顺序排列。

信息学奥赛一本通(C++版) 第一部分 C++语言 第六章 函数

1、经过《算法竞赛入门经典(第2版)》第三章 数组和字符串 的训练,此题几乎没费什么力,代码就写出了。

2、写代码过程中的一个失误是将输入读成密码,明文,输出为密文,改起来没费什么周折,只是将+改成-。

3、编译后,输出与预想的不一样,跟踪调试上花了点时间,很快就改好了。

4、输出结束后要不要回撤换行,斗争了小一会,最后决定加上,不然怎么判断是完整的一行呢。

5、经对拍对比,此题10个输入输出完全正确,100分。

上述 1159 斐波那契数列 程序执行过程如下:


Richard对图的顶点聚类问题非常感兴趣,这一次,他提出了一个新的想法。

假如现在有n个顶点(从0开始编号),每个顶点x有两个值,分别表示为f(x)和g(x)(都是整数范围,即int范围)。对于顶点x,其它任一顶点y到x的距离为d = ( f(y)-f(x) )/( g(y)-g(x) )。开始时,图中没有边,现在对每个顶点x执行以下算法来向图中添加边:

从所有异于x的点中选取一个顶点y,使得y到x的距离d是所有点中最小的,并且d ≥ 0。如果有多种选择,则选abs(f(y)-f(x))最小的一个(abs(t)表示取t的绝对值),如果有多个abs(f(y)-f(x))相等,则选择f(y)-f(x)>0的那个点;
添加无向边(x, y)(如果这条边已经存在,则不重复添加).
这样一来,所有顶点一定在某个聚类的簇中。Richard现在想设计一个查询工具,对于给定的任意两点x和y,能够快速知道它们是不是在同一个簇中(即是否存在一条x到y的路径)?

对每一个Query,如果x和y在同一个簇中,输出yes,否则输出no。

我要回帖

更多关于 信息学是什么 的文章

 

随机推荐