银联高校极客挑战赛 初赛 第一场
Description
这题的坑跟今年山东省赛(ACM)C题相同
看题目描述最后一句话:在这M个赛季过程中,最高净胜场是多少?
是过程中,而不是整个赛季结束后!
若完成一个循环形式呈“盈利式”,则最佳状态取在首场“单位循环最佳收益”完成后
若完成一个循环形式呈“亏损式”,则最佳状态取在末场”单位循环最佳收益”完成后
关于“单位循环最佳收益”best:
如 +1 +1 +1 -1 -1 -1 + 2 -1
best取3,取在第三位后,而非第七位(+2)后
而“单位循环固定收益”basis为 1
Code
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
int main()
{
ll t, n, k, ck, m, cnt, num, num_max;
char ch;
scanf("%lld", &t);
while(t--)
{
cnt = 0, num_max = num = 0;
scanf("%lld%lld%lld", &n, &k, &m);
ck = k;
getchar();
for(int i = 0; i < n; ++i)
{
scanf("%c", &ch);
if(ch == '1')
cnt++, num++;
else
{
if(ck)
ck--;
else
num--;
}
if(num > num_max)
num_max = num;
}
if(n - cnt <= k)
cout << m * cnt << '\n';
else
{
if(n - cnt - k <= cnt)///卡用光仍有输场
cout << (m - 1) * (2 * cnt - n + k) + num_max << '\n';
else
cout << (num_max > 0 ? num_max : 0) << '\n';
}
}
return 0;
}
省赛C题更狠,那题“单位循环最佳收益”与“单位循环固定收益”是不同向的!“收益”有了方向!
完成一个循环呈“盈利式”,但最佳状态也可能取在第一场的“单位循环最佳收益”完成后!
假设只有两次循环时,best = 5,与x轴夹角为0°,basis = 2, 与x轴夹角180°(接近180即可),这样一来,正确答案应为5,答案7 (2 + 5)就是错误答案了