题目:点此

                                    题目描述

绪萌同人社是一个有趣的组织,该组织结构是一个树形结构。有一个社长,直接下属一些副社长。每个副社长又直接下属一些部长……。

每个成员都有一个萌点的属性,萌点属性是由一些质数的萌元素乘积构成(例如,猫耳的值是2,弱气的值是3,黄毛的值是5,病娇的值是7,双马尾的值是11等等)

举个例子,正妹是双份的猫耳,而且有一份弱气,她的属性值为2*2*3=12。

现在组员关心一个问题,希望知道离自己最近且有相同萌元素上司是谁,例如,属性值为2、4、6、45这样的属性值都算是和正妹有相同的属性。

然而,组员可能会随时变化自己的属性。啊。。感觉好麻烦啊。。

                                     思路

请大家记住:遇到题目先暴力!!!再优化!!!

所以,这道题就可以向上遍历,如果找到根还没找到具有同萌元素的上司,输出-1。

接着,什么是具有同萌元素?按照题目里来说,就是都有相同的质因数,就是最大公约数>1,辗转相除随便上!

最后main函数就是这几个函数的结合。

然后…暴力就这样神奇的过了。

                                 犯的错误

1.存树只用一个parent数组就行了(存双亲)

2.为避免错,尽量数组下标从1开始,应为输入的编号99%从1开始,存储时从0开始会导致出错。

3.gcd(辗转相除函数)中不用交换a和b,举个例子,7、14,7%14=7,14%7=0。

4.puts函数会自动换行,不用在里边加\n。

5.数组int a={-1},会初始化成{-1,0,0,0……},所以用memset最有效。补充:memset(a,-1,sizeof(a)只能将a里的数据全部变成负数而不是-1,因为memset是以字节为单位的,都变成-1会让每一个元素变成10000001 100000001 100000001 100000001(int四字节),即-2122219135(不信你计算器算一遍)

                                    收获

1.拿到题,先想树是邻接表还是逆邻接表,还是结合?逆邻接表parent数组,邻接表vector,结合就是两者都要。

2.数组下标尽量从1开始。

3.gcd函数中不用交换。

4.puts函数会自动换行。

5.初始化数组尽量用memset,不行就循环。‬

 

posted on 2020-03-14 15:20  eason66  阅读(112)  评论(0编辑  收藏  举报