ACM团队招新赛题解-阿里云开发者社区

开发者社区> 开发与运维> 正文

ACM团队招新赛题解

简介: 标程代码全部为C语言编写。代码中的#if LOCAL_ 至#endif为本地一些调试内容,可以忽略。 Xenny的A+B(1)【容易】【签到】 签到题,做不出的话可能你有点不太适合ACM了。       Xenny的A+B(2)【容易】【签到】 也没什么好说的,用一个循环控制输入的次数就行了     Xenny的A+B(3)【困难】【模拟】 这是本次比赛最难的题目,用意在于赛后你们看见此题题解可以开拓一下思维方式,不要局限于中学的思维,要掌握计算机。

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

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

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

 

 

 

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

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

 

 

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

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

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

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

 

 

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

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

 

 

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

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

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

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

 

 

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

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

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

 

 

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

 

 

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

L大于等于4

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

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

 

 

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

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

 

 

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

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

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

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

 

 

 

代码1

 

 

 

代码2

 

 

 

代码3

 

 

 

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

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

a = 1

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

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

 

 

 

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

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

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

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

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

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

 

 

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

 

 

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

 

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

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章