码迷,mamicode.com
首页 > 其他好文 > 详细

ACM团队招新赛题解

时间:2018-11-04 12:39:33      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:团队   次数   局限   个数   操作   方式   inf   ima   分享图片   

标程代码全部为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以及~操作的解释各位可以自行搜索。

 

ACM团队招新赛题解

标签:团队   次数   局限   个数   操作   方式   inf   ima   分享图片   

原文地址:https://www.cnblogs.com/xenny/p/9903217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!