team2012-D1-sol-0009
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
=== 题目大意 ===
给出下面 4 个函数:
* g(x) = x^(x/2)
* h1(x) = x / m1 * m1 + ( x + s1) % m1
* h2(x) = x / m2 * m2 + ( x + s2) % m2
* f(x) = g( h2( g( h1( g( x ) ) ) ) )
然后再给出一坨x和f(x), 让你求 s1, m1, s2, m2 这四个参数.
=== 数据范围 ===
* 0 < s1, m1, s2, m2 < 345678
=== 解题思路 ===
这题最直接的想法就是枚举, 而且 sample 已经给出了很多组数据, 就是要让你利用这些数据来算出这 4 个参数, 所以时间范围可以适当放宽, 比如半小时或者一小时跑出来都是可以接受的. 当然 345678^4 这样的枚举肯定会超时, 但是平方级别 (345678^2) 的复杂度就可以接受了. 于是就考虑如何在枚举 s1 和 m1 (s2 和 m2) 的情况下验证是否有合法解.
其实我不是很懂为什么在确定 s1 和 m1 的情况下, s2 和 m2 有多解也是不合法的... 我是照着猛犸学长的思路写完程序然后算出来...
题目大意
给出下面 4 个函数:
- g(x) = x^(x/2)
- h1(x) = x / m1 * m1 + ( x + s1) % m1
- h2(x) = x / m2 * m2 + ( x + s2) % m2
- f(x) = g( h2( g( h1( g( x ) ) ) ) )
然后再给出一坨x和f(x), 让你求 s1, m1, s2, m2 这四个参数.
数据范围
- 0 < s1, m1, s2, m2 < 345678
解题思路
这题最直接的想法就是枚举, 而且 sample 已经给出了很多组数据, 就是要让你利用这些数据来算出这 4 个参数, 所以时间范围可以适当放宽, 比如半小时或者一小时跑出来都是可以接受的. 当然 3456784 这样的枚举肯定会超时, 但是平方级别 (3456782) 的复杂度就可以接受了. 于是就考虑如何在枚举 s1 和 m1 (s2 和 m2) 的情况下验证是否有合法解.
其实我不是很懂为什么在确定 s1 和 m1 的情况下, s2 和 m2 有多解也是不合法的... 我是照着猛犸学长的思路写完程序然后算出来...