首页 > 代码库 > 二模 (8) day1

二模 (8) day1

第一题:

题目大意:

梦幻城市每年为全市高中生兴办一次运动会。为促使各校同学之间的交流,采用特别的分队方式:每一个学校的同学,必须被均匀分散到各队,使得每一队中该校的人数皆相同。为增加比赛的竞争性,希望分成越多队越好。你的任务是由各校的人数决定最多可以分成的队数。

 

解题过程:

1.直接求所有数的最大公约数即可。

初始得分100.

 


 

 

第二题:

题目大意:

给出一个式子火柴棍组成的A+B=C。(A,B,C<=999),求移动最少的火柴使得等式成立。不允许改变位数以及符号,不要制造0开头的数。

 

解题过程:

1.一开始想到用dfs什么的直接暴搜,但是写起来各种麻烦。。而且可能还很慢。

2.考虑到数的范围<=999,那么就枚举目标状态的A和B,1000*1000的复杂度,然后计算初始状态到目标状态的最少步数。。

3.计算最少步数的过程:先打个表,move[i][j]表示数字i到数字j需要移动多少根火柴使得i是j的一部分,或者j是i的一部分。

比如 0到6,需要把0的一根火柴移到最中间,所以move[0][6]=1.   1 到 7,1本身就是7的一部分,所以move[1][7]=0;

然后用hash[i][j] 表示 i 变成 j 需要添加 多少根火柴。 比如 4需要4根火柴,8需要7根,所以

hash[4][8]=3;

hash[8][4]=-3; (负数表示需要拿掉火柴)

4.然后把初始状态和目标状态逐位 比较 计算距离 , 比如 12 到 23 ,1变成2 需要添加3根火柴,2到3需要移动1根火柴。

用tmp1表示一共需要添加多少根火柴,tmp2表示一共需要移走多少根火柴(就是所有负数的绝对值的和),tmp3表示需要移动多少根火柴。   首先必须满足tmp1= tmp2,也就是目标状态和初始状态用的火柴一样多。。然后更新ans。

ans=min(ans,tmp1+tmp3);

有点贪心的思想。 初始得分100。

 


 

 

第三题:

题目描述:

长郡中学校长打算举行建校100周年的晚会。学校的职员是分等级的,也就是说职员之间的上下级关系组成一棵以校长为树根的树。校长要亲自邀请一些职员参见晚会。同时校长亲自到场欢庆这个节日。职员用1~n之间的整数编号,人事处给出了每个职员的搞笑指数。如果一个人和他上司一起参加,那么便可能产生麻烦。为了使晚会的每个参加者都高兴,校长不会同时邀请某个职员和他的顶头上司。
你的任务是给出一个客人列表,使得客人的搞笑指数之和最大。

 

解题过程:

1.裸的树形dp。但是 题目说的不是很清楚,题目的本意 貌似是 校长在1~n里,且校长必须选。。

2.一开始把校长不考虑在n个人中,然后虚拟了一个节点(校长),结果就WA 5个点了。 初始得分50.

 

二模 (8) day1