[国家集训队] 单选错位 - 洛谷
思路:
其实每个位置的得分只和前一个位置有关。
而他们俩的所有情况的期望就是答案的这部分。 ——这是难想的,我期望学的不好。
(题目给的是每种情况的所有位置的和,全加起来是答案;我们算的是这个位置的所有情况的值)
然后每个位置和前一个位置的情况可以分三种:(其实就是上面大佬的题解分析)
ai == ai+1 对ai+1来说每次得分 1/ai
ai < ai+1 对ai+1来说 (当答案落在ai内时) ai/ai+1*(1/ai) == 1/ai+1
ai > ai+1 ai+1/ai * 1/ai+1 == 1/ai
代码:
int a[mx];
void solve(int c)
{int n, A, B, C;// for C/C++scanf("%d%d%d%d%d", &n, &A, &B, &C, a + 1);for (int i = 2; i <= n; i++)a[i] = ((long long)a[i - 1] * A + B) % 100000001;for (int i = 1; i <= n; i++)a[i] = a[i] % C + 1;//double ans = 0;//n填到1ans += 1.0 / (double)max(a[1], a[n]);for (int i = 2; i <= n; i++){ans += 1.0 / (double)max(a[i - 1], a[i]);}printf("%0.3lf", ans);return;
}signed main()
{//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;for (int i = 1; i <= t; i++){solve(i);}return 0;
}