QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#753386 | #5983. Pretty Good Proportion | FXT1110011010OI | 5 | 1944ms | 39220kb | C++14 | 1.4kb | 2024-11-16 12:41:02 | 2024-11-16 12:41:03 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef pair<double, int> PDI;
const int N = 1e6 + 10;
const double eps = 1e-9;
char a[N];
int sum[N];
int main()
{
int T, cnt = 0; scanf("%d", &T);
while (T -- )
{
int n; double f; scanf("%d%lf%s", &n, &f, a + 1);
for (int i = 1; i <= n; i ++ ) sum[i] = sum[i - 1] + a[i] - '0';
if (n <= 1000)
{
double mn = 1e9; int res = 1e9;
for (int i = 1; i <= n; i ++ )
for (int j = i; j <= n; j ++ )
{
double now = 1.0 * (sum[j] - sum[i - 1]) / (j - i + 1);
if (fabs(mn - f) > fabs(now - f)) mn = now, res = i;
else if (fabs(fabs(mn - f) - fabs(now - f)) < eps) res = min(res, i);
}
printf("Case #%d: %d\n", ++ cnt, res - 1);
continue;
}
double mn = 1e9; int res = 1e9;
set<PDI> ag;
for (int i = 1; i <= n; i ++ )
{
ag.insert({1.0 * sum[i - 1] - f * (i - 1), i});
auto it = ag.lower_bound({1.0 * sum[i] - f * i, 0});
if (it != ag.end())
{
double v = (*it).first - (1.0 * sum[i] - f * i);
if (mn - v > eps) mn = v, res = (*it).second;
else if (fabs(mn - v) < eps) res = min(res, (*it).second);
}
if (it != ag.begin())
{
it -- ;
double v = (1.0 * sum[i] - f * i) - (*it).first;
if (mn - v > eps) mn = v, res = (*it).second;
else if (fabs(mn - v) < eps) res = min(res, (*it).second);
}
}
printf("Case #%d: %d\n", ++ cnt, res - 1);
}
return 0;
}
詳細信息
Subtask #1:
score: 5
Accepted
Test #1:
score: 5
Accepted
time: 38ms
memory: 3960kb
input:
100 10 0.827672 0010101011 4 0.932623 0100 1000 0.834002 011001110010111110000110101100010010100101101110110111100010101101111100110001011000110100010100011011000001100001010110111101111010110110000110011000111000011110101100100111111001111011011100111001011101010100111011100011110011100011110010001...
output:
Case #1: 6 Case #2: 1 Case #3: 10 Case #4: 0 Case #5: 0 Case #6: 1 Case #7: 0 Case #8: 0 Case #9: 0 Case #10: 0 Case #11: 0 Case #12: 4 Case #13: 5 Case #14: 564 Case #15: 0 Case #16: 0 Case #17: 0 Case #18: 0 Case #19: 0 Case #20: 0 Case #21: 0 Case #22: 0 Case #23: 0 Case #24: 844 Case #25: 0 Case...
result:
ok 100 lines
Subtask #2:
score: 0
Wrong Answer
Test #2:
score: 0
Wrong Answer
time: 1944ms
memory: 39220kb
input:
100 15 0.333333 000000000011000 10 0.418754 0101100001 2 0.499999 01 3 0.977951 001 2 0.249999 01 10 0.670229 0111011001 1000 0.500001 001101111110110010110000010010110001110010001101110111010011000010100011011101010110011011011010111110011100011000001000101011100011010100101101111110100101011010111...
output:
Case #1: 6 Case #2: 0 Case #3: 0 Case #4: 2 Case #5: 0 Case #6: 0 Case #7: 0 Case #8: 0 Case #9: 0 Case #10: 0 Case #11: 0 Case #12: 0 Case #13: 0 Case #14: 0 Case #15: 0 Case #16: 1 Case #17: 0 Case #18: 0 Case #19: 123 Case #20: 0 Case #21: 0 Case #22: 0 Case #23: 0 Case #24: 0 Case #25: 0 Case #2...
result:
wrong answer 16th lines differ - expected: 'Case #16: 4333', found: 'Case #16: 1'