社区讨论
重金100块求各位大佬帮忙看一下这个代码中的问题
CF878BTeams Formation参与者 14已保存回复 97
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 97 条
- 当前快照
- 1 份
- 快照标识符
- @mhj2v0f5
- 此快照首次捕获于
- 2025/11/03 19:49 4 个月前
- 此快照最后确认于
- 2025/11/03 20:41 4 个月前
大家好,我是一名很菜的信息学竞赛教练。
目前的情况是,我的学生问了我一个问题,以下是出错的代码链接(cf上的):
(不知道大家能不能看到,我会在最下面再贴一下代码)
题目是 CF878B. Teams Formation 难度:cf rating 2300
目前的情况是,我差不多知道他的代码在干嘛,但是我不知道哪里出错了,所以请各位大佬帮忙看一下,出错的地方在哪里。
唯一的要求是:得指出代码中出错的地方,以及 正确的代码需要在源代码的基础上进行修改,且 尽量不要改动太大。
第一位按要求解决的大佬请私信我,或者在下方留言,我会转账 100 元红包作为酬谢。万分感谢!
代码如下:
C#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
pair<int,int>b[N];
int a[N],tot;
signed main()
{
// freopen("array3.in","r",stdin);
// freopen("array.out","w",stdout);
int n,k,m;
scanf("%lld%lld%lld",&n,&k,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
{
if(tot&&b[tot].second%k==0)tot--;
if(a[i]==b[tot].first)
b[tot].second++;
else
b[++tot]={a[i],1};
}
int cnt=0;
for(int i=1;i<=tot;i++)
{
while(b[i].second--)
a[++cnt]=b[i].first;
}
int l=1,r=cnt;
while(l<r&&a[l]==a[r])
{
int cnt=2;
while(l+1<r&&a[l]==a[l+1])l++,cnt++;
while(r-1>l&&a[r]==a[r-1])r--,cnt++;
l++,r--;
if(cnt%k)break;
}
if(l>r)
printf("%lld",m&1?cnt:0);
else
if(l==r)
printf("%lld",m&1?(m-1)%k+cnt:m%k);
else
printf("%lld",(r-l+1)*(m-1)+cnt);
return 0;
}
回复
共 97 条回复,欢迎继续交流。
正在加载回复...