Codeforces Round #639 (Div. 2) C. Hilbert's Hotel
本文共 971 字,大约阅读时间需要 3 分钟。
要解决这个问题,我们需要检查每个数移动到指定位置后是否有重复的位置。如果有任何一个位置被多个数占据,则返回“NO”,否则返回“YES”。
思路
问题分析:我们需要确保每个位置(i + a[i]) % n 之后都是唯一的。 直接验证:计算每个数移动后的位置,记录到哈希表中,检查是否存在重复。 步骤: - 遍历数组中的每个元素。
- 计算该元素移动后的新位置。
- 使用哈希表记录位置出现次数。
- 如果有位置出现次数超过一次,立即返回“NO”。
优化考虑:直接访问和记录位置,避免复杂的计算,确保代码简洁高效。 解决代码
#include #include
代码解释
输入读取:首先读取测试用例的数量t。 循环处理每个用例:读取n的值,初始化位置记录哈希表posMap。 遍历数组元素:对于每个元素x,计算其移动后的位置new_pos。 位置记录和重复检查:将new_pos记录到哈希表,检查是否有重复。如果有,设置标志并跳出循环。 输出结果:根据标志值输出“NO”或“YES”。 转载地址:http://pkhwk.baihongyu.com/