社区讨论

重金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 条回复,欢迎继续交流。

正在加载回复...