最近开始刷Codeforces……结果C题就卡了我好久……orz……
A题,很简单,看长和宽需要多少块地砖,一乘就好了,注意用int64
B题,类似进制转换的题,字母转换成数字需要+1,数字转换成字母需要-1,因为在题目中'A'是代表1,而在代码中'A'代表0.这题我代码写得很丑,自己都不想看第二眼……orz
C题,很有趣的一题,给三个点,要求这三个点是一个正n边形的三个顶点,而这个正n边形面积最小是多少。
看了白神的解题报告,才YY出来的……在此膜拜下……
关键的一点是过这三个点做个圆,那么这个圆就是正n边形的外接圆,因为正n边形都是可以从圆里切出来的。
之后更关键的一点是这三个点组成的三角形的每个内角都是以这个圆为外接圆的正n边形的任意一条边的圆周角的整数倍……(这句话好长……)
如果不理解的上图
假设题目给定ABE三点,答案的n为6,那么对于角AEB,角EBA,这两个角都等于该正六边形的边所对的圆心角(因为AB为正六边形的边,所对圆心角为E,即与角AEB为同一个角,所以角AEB=该正六边形所对圆心角,同理可得角EBA也是),那么对于角EAB,该角可以分割为角EAD,角DAC,角CAB,显然后面分割的三个角也是该正六边形的圆周角,所以角EAB是该正六边形的圆周角的3倍。
对于一个三角形的任意一个角,都可以用上述分割方法分割为正n边形的整数倍(当且仅当该正n边形满足其中三个顶点为题目所给的三个点),因此只需要从小到大枚举n,判断给出的三角形是否满足上述条件即可。
遇到的问题1:怎么求三角形的内角
通过高中学的向量的知识
2.知道n,如何求该正n边形的面积
最后附上代码