ACM团队招新赛题解

标程代码全部为C语言编写。代码中的#if LOCAL_ #endif为本地一些调试内容,可以忽略。

XennyA+B1)【容易】【签到】

签到题,做不出的话可能你有点不太适合ACM了。

 ACM团队招新赛题解_第1张图片

 

 

XennyA+B2)【容易】【签到】

也没什么好说的,用一个循环控制输入的次数就行了

 ACM团队招新赛题解_第2张图片

 

XennyA+B3)【困难】【模拟】

这是本次比赛最难的题目,用意在于赛后你们看见此题题解可以开拓一下思维方式,不要局限于中学的思维,要掌握计算机。

乍一看这题没法做,怎么去存AB两个这么大的数字,但我们可以用数组存储这两个数字,然后模拟手算,一位一位的相加,满10进位,使用数组模拟的方式便可以很快的解决掉这道题目。值得注意的是char数组存储的是ASCII码,注意之间转换。

注:scanf中的第一个%s前的空格不是没有意义的,它是为了吸收缓冲区的东西,防止造成错误。

 ACM团队招新赛题解_第3张图片

ACM团队招新赛题解_第4张图片

ACM团队招新赛题解_第5张图片

 

Xenny的三角形(1)【容易】【签到】

三角形任意两边之和大于第三边,根据这个判断即可。

 ACM团队招新赛题解_第6张图片

 

Xenny的三角形(2)【简单】【枚举】

直角三角形满足勾股定理,而且这道题数据范围不大。

直接循环枚举1C的每个数i,再判断sqrt(C^2 - i^2)是不是一个整数即可。

注意输出条件!输出的时候得判断一下哪个数小一点,先输出较小数字。

 ACM团队招新赛题解_第7张图片

ACM团队招新赛题解_第8张图片

 

Xenny的三角形(3)【一般】【思维】

题意即为给你RT三角形的一条直角边A,找BC

直接运用勾股数的定义求即可。此题若不知道勾股数的相关规律较难,但也不难找出规律。

 ACM团队招新赛题解_第9张图片

 

了解规律后,这题变得很简单了。直接套用即可,同时判断一下BC是否合法。

 ACM团队招新赛题解_第10张图片

 

Xenny的数学题(1)【简单】【思维】

L大于等于4

L为偶数时,一定可以拼出矩形,最大面积即为最接近正方形的时候。

L为奇数时,肯定不能拼一个没有多余部分的矩形。

 ACM团队招新赛题解_第11张图片

 

Xenny的数学题(2)【简单】【简单数学】

直接计算僵尸走到植物面前需要几秒,每秒承受一颗豆子,判断能否射死僵尸即可。

 ACM团队招新赛题解_第12张图片

 

Xenny的数学题(3)【一般】【简单几何】

这题应该算简单题,但涉及到精度计算,还是归为一般算了。

高中数学知识,两种方式,建坐标系或者几何法。下面给出几何法的过程。

不要看过程运算量大,计算机的存在就是帮你运算。所以也希望各位能从这道题中领悟些东西。

 ACM团队招新赛题解_第13张图片

 

 

代码1

 ACM团队招新赛题解_第14张图片

 

 

代码2

 ACM团队招新赛题解_第15张图片

 

 

代码3

 ACM团队招新赛题解_第16张图片

ACM团队招新赛题解_第17张图片

 

 

Xenny的数字【简单】【思维】

就是让你找到三个数a+b+c = x,而且都不是3的倍数。

a = 1

如果x-2不是三的倍数,则11x-2满足题意;

如果x-2是三的倍数,那么x-3肯定不是三的倍数,此时12x-3满足题意。

 ACM团队招新赛题解_第18张图片

 

 

Xenny的防AK题【一般】【位运算+思维+猜】

为什么说这道题一般呢,如果我把数据范围开大一点这道题肯定就是非常困难的题目了。但我的每个数字Ai-th都是小于1e7的,所以你可以开一个1e7的数组存储每个数字出现的次数,最后再遍历一遍寻找出现次数为奇数次的数字即可,不管是空间还是时间限制都是允许的。如果你没有做出这道题,可以尝试用这种方法解决这道题。

正解是需要用到异或位运算操作,何为异或,自行搜索。

异或有这么一个性质:A^B^B = A;

根据这个性质,我们在输入的时候把每个值都异或。最后的得到的Num即为我们要求的两个数字AB的异或值,现在要做的就是如何分解得到两个数。

Num中一定有不为0的二进制位置(易理解),假设第k位不为0,则AB的第k位不为0,数组中的其余的数若有第k位不为0的数对,则AB与这些数对异或,可以得到AB,最后再让此数与Num异或,则得到另外一值。

 ACM团队招新赛题解_第19张图片

 

还是再给你们写一下用第一种方法解决的代码

 ACM团队招新赛题解_第20张图片

 

还有一点,我说了这道题目我只给了一组数据,而且范围在[600,800]之间,你有猜到我的答案吗?没错,就是760,所以你直接输出760也可以AC掉这题。

 

  1. S.可能你们知道while(scanf(...) != EOF)是多组输入,但我的题解中多用while(~scanf(...))~其实就是取非符号,每个语句都是有返回值的,!= EOF这种方式就是说scanf的返回值不能是EOF,而~EOF恰好等于0,二者是等价的,所以可以这样进行多组输入。具体关于EOF以及~操作的解释各位可以自行搜索。

 

你可能感兴趣的:(数据结构与算法,c/c++)