题解:P17116 [Algo Beat 009 & MROI-R1] Avoid K Prefix
SheepGod33 · · 题解
思路
由于不知道正解所以打暴力,由于 TLE 所以优化,由于优化所以 AC。
显然可以枚举 break,否则继续循环,直到循环完了都没有答案(即 No。
显然可以想到不需要真正的反转,只用对应反转后的下标就行。\
在区间
显然又可以想到,反转不会影响 No。\
由于 break 了。
已经把
其他细节见代码。
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int t, n, k, x, flag, flag2, a[2010], sum[2010], f[2010];
signed main()
{
scanf("%lld", &t);
while (t--)
{
scanf("%lld%lld", &n, &k), memset(sum, 0, sizeof sum), memset(f, 0, sizeof f), flag = 1, f[n + 1] = 1;
for (int i = 1; i <= n; i++)
scanf("%lld", &a[i]), sum[i] = sum[i - 1] + a[i];
for (int i = n; i >= 1; i--)
if (sum[i] != k && f[i + 1])
f[i] = 1;
for (int l = 1; l <= n; l++)
{
for (int r = l; r <= n; r++)
{
x = sum[l - 1], flag2 = 1;
for (int i = l; i < r; i++)
x += a[r - i + l], flag2 &= x != k;
if (flag2 && f[r])
{
printf("Yes %lld %lld\n", l, r), flag = 0;
break;
}
}
if (!flag || sum[l] == k)
break;
}
if (flag)
printf("No\n");
}
return 0;
}
给个赞再走吧。