1 solutions

  • 0
    @ 2025-12-3 16:38:14

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    long long t[500005];
    long long dp[500005];
    const long long MOD = 2147483648;
    int main()
    {
    	int g;
    	cin >> g;
    	deque<int> deq;
    	while (g--) {
    		int n, l;
    		long long seed, m;
    		cin >> n >> l >> seed >> m;
    		t[0] = 0;
    		long long state = seed; 
    		for (int i = 1; i <= n; i++) {
    			state = (state * 1103515245 + 12345) % MOD;
    			t[i] = 1 + (state % m);
    		}
    		dp[0] = 0;
    		deq.push_back(0);
    		for (int i = 1; i <= n; i++) {
    			while (!deq.empty() && deq.front() < i-l)
    				deq.pop_front();
    			dp[i] = dp[deq.front()]+t[i];
    			while (!deq.empty() && dp[deq.back()] > dp[i])
    				deq.pop_back();
    			deq.push_back(i);
    		}
    		cout << dp[n] << endl;
    		while (!deq.empty()) deq.pop_back();
    	}
    	return 0;
    }
    
    • 1

    Information

    ID
    900
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    (None)
    # Submissions
    0
    Accepted
    0
    Uploaded By