QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#339340 | #7904. Rainbow Subarray | JokerNVT | WA | 46ms | 6256kb | C++20 | 2.0kb | 2024-02-27 07:41:17 | 2024-02-27 07:41:18 |
Judging History
answer
#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <string>
#include <map>
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include <cstdlib>
#include <set>
#define sqr(x) (x) * (x)
using namespace std;
const int MAX_SIZE = int(1e5+5);
const long long MOD = int(1e9+7);
const double EPS = 1e-9;
int T, n;
long long k;
int findLongestRainbowSubarray(vector<long long> &a, vector<long long> &psum, vector<long double> &psumSqr, long long k) {
int ans = 1;
int l = 1, r = n;
while (l <= r) {
int len = (l+r) >> 1;
int index = len;
long double criteria = (long double)1e35;
for (int i=len; i<=n; i++) {
long long sum = psum[i] - psum[i-len];
long long avg = sum / len;
long double f = (psumSqr[i] - psumSqr[i-len]) / len - sqr(avg);
if (f + EPS <= criteria) {
criteria = f;
index = i;
}
}
long long sum = psum[index] - psum[index-len];
vector<long long> f(2, 0);
long long avg = sum / len;
for (int j=0; j<len; j++) {
f[0] += abs(a[index-len+j+1] - (avg + j - len / 2));
f[1] += abs(a[index-len+j+1] - (avg + j - len / 2 + 1));
}
long long need = min(f[0], f[1]);
if (need <= k) {
ans = max(ans, len);
l = len+1;
}
else r = len-1;
}
return ans;
}
void solve() {
cin >> T;
while (T--) {
cin >> n >> k;
vector<long long> a(n+1);
vector<long long> psum(n+1, 0);
vector<long double> psumSqr(n+1, 0);
for (int i=1; i<=n; i++) {
cin >> a[i];
psum[i] = psum[i-1] + a[i];
psumSqr[i] = psumSqr[i-1] + sqr(a[i]);
}
cout << findLongestRainbowSubarray(a, psum, psumSqr, k) << endl;
}
}
int main() {
// freopen("inp.txt", "r", stdin);
//Boost C++ IO speed
ios_base::sync_with_stdio(false);
cin.tie(0);
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3556kb
input:
5 7 5 7 2 5 5 4 11 7 6 0 100 3 4 5 99 100 5 6 1 1 1 1 1 5 50 100 200 300 400 500 1 100 3
output:
4 3 5 1 1
result:
ok 5 lines
Test #2:
score: -100
Wrong Answer
time: 46ms
memory: 6256kb
input:
11102 2 167959139 336470888 134074578 5 642802746 273386884 79721198 396628655 3722503 471207868 6 202647942 268792718 46761498 443917727 16843338 125908043 191952768 2 717268783 150414369 193319712 6 519096230 356168102 262263554 174936674 407246545 274667941 279198849 9 527268921 421436316 3613460...
output:
1 4 3 2 6 5 7 2 4 1 4 1 1 3 2 2 6 8 7 7 1 7 6 2 4 3 1 4 7 7 3 4 3 9 3 8 6 6 2 1 6 3 1 2 4 6 4 5 4 1 4 7 1 6 3 5 6 6 1 7 5 3 1 6 3 4 3 2 2 6 2 3 10 1 4 3 2 4 5 1 7 5 5 4 6 5 3 6 2 5 5 8 5 4 5 2 1 5 2 3 3 4 7 1 3 1 2 2 6 3 1 6 8 1 8 4 5 5 6 7 4 8 3 2 8 4 5 5 2 6 2 4 1 5 4 5 3 2 4 1 2 1 4 4 8 3 7 3 3 3...
result:
wrong answer 17th lines differ - expected: '7', found: '6'