ACM团队招新赛题解
Posted xenny
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM团队招新赛题解相关的知识,希望对你有一定的参考价值。
标程代码全部为C语言编写。代码中的#if LOCAL_ 至#endif为本地一些调试内容,可以忽略。
Xenny的A+B(1)【容易】【签到】
签到题,做不出的话可能你有点不太适合ACM了。
Xenny的A+B(2)【容易】【签到】
也没什么好说的,用一个循环控制输入的次数就行了
Xenny的A+B(3)【困难】【模拟】
这是本次比赛最难的题目,用意在于赛后你们看见此题题解可以开拓一下思维方式,不要局限于中学的思维,要掌握计算机。
乍一看这题没法做,怎么去存A和B两个这么大的数字,但我们可以用数组存储这两个数字,然后模拟手算,一位一位的相加,满10进位,使用数组模拟的方式便可以很快的解决掉这道题目。值得注意的是char数组存储的是ASCII码,注意之间转换。
注:scanf中的第一个%s前的空格不是没有意义的,它是为了吸收缓冲区的东西,防止造成错误。
Xenny的三角形(1)【容易】【签到】
三角形任意两边之和大于第三边,根据这个判断即可。
Xenny的三角形(2)【简单】【枚举】
直角三角形满足勾股定理,而且这道题数据范围不大。
直接循环枚举1至C的每个数i,再判断sqrt(C^2 - i^2)是不是一个整数即可。
注意输出条件!输出的时候得判断一下哪个数小一点,先输出较小数字。
Xenny的三角形(3)【一般】【思维】
题意即为给你RT三角形的一条直角边A,找B和C。
直接运用勾股数的定义求即可。此题若不知道勾股数的相关规律较难,但也不难找出规律。
了解规律后,这题变得很简单了。直接套用即可,同时判断一下B,C是否合法。
Xenny的数学题(1)【简单】【思维】
L大于等于4;
当L为偶数时,一定可以拼出矩形,最大面积即为最接近正方形的时候。
当L为奇数时,肯定不能拼一个没有多余部分的矩形。
Xenny的数学题(2)【简单】【简单数学】
直接计算僵尸走到植物面前需要几秒,每秒承受一颗豆子,判断能否射死僵尸即可。
Xenny的数学题(3)【一般】【简单几何】
这题应该算简单题,但涉及到精度计算,还是归为一般算了。
高中数学知识,两种方式,建坐标系或者几何法。下面给出几何法的过程。
不要看过程运算量大,计算机的存在就是帮你运算。所以也希望各位能从这道题中领悟些东西。
代码1:
代码2:
代码3:
Xenny的数字【简单】【思维】
就是让你找到三个数a+b+c = x,而且都不是3的倍数。
令a = 1;
如果x-2不是三的倍数,则1,1,x-2满足题意;
如果x-2是三的倍数,那么x-3肯定不是三的倍数,此时1,2,x-3满足题意。
Xenny的防AK题【一般】【位运算+思维+猜】
为什么说这道题一般呢,如果我把数据范围开大一点这道题肯定就是非常困难的题目了。但我的每个数字Ai-th都是小于1e7的,所以你可以开一个1e7的数组存储每个数字出现的次数,最后再遍历一遍寻找出现次数为奇数次的数字即可,不管是空间还是时间限制都是允许的。如果你没有做出这道题,可以尝试用这种方法解决这道题。
正解是需要用到异或位运算操作,何为异或,自行搜索。
异或有这么一个性质:A^B^B = A;
根据这个性质,我们在输入的时候把每个值都异或。最后的得到的Num即为我们要求的两个数字A,B的异或值,现在要做的就是如何分解得到两个数。
Num中一定有不为0的二进制位置(易理解),假设第k位不为0,则A或B的第k位不为0,数组中的其余的数若有第k位不为0的数对,则A或B与这些数对异或,可以得到A或B,最后再让此数与Num异或,则得到另外一值。
还是再给你们写一下用第一种方法解决的代码
还有一点,我说了这道题目我只给了一组数据,而且范围在[600,800]之间,你有猜到我的答案吗?没错,就是760,所以你直接输出760也可以AC掉这题。
- S.可能你们知道while(scanf(...) != EOF)是多组输入,但我的题解中多用while(~scanf(...)),~其实就是取非符号,每个语句都是有返回值的,!= EOF这种方式就是说scanf的返回值不能是EOF,而~EOF恰好等于0,二者是等价的,所以可以这样进行多组输入。具体关于EOF以及~操作的解释各位可以自行搜索。
以上是关于ACM团队招新赛题解的主要内容,如果未能解决你的问题,请参考以下文章
2021SWPU-ACM 预选赛题解 Tutorial of SWPU Pre-teammate Contest ( 2021 )