竞赛讨论区 > 求改错
头像
小盖
发布于 2019-10-18 22:03
+ 关注

求改错

没人发题解吗?

想了一个小时,没想出来优化

求改错

#include<iostream>

const int o=998244353;
int n,k,s,a[10000010],t=0;

int gcd(int a,int b)
{
	while (a^=b^=a^=b%=a);
	return b;
}

int main()
{
	std::cin>>n>>k>>s;
	for (int i=1;i<=n;++i)
		std::cin>>a[i];
	for (int i=1;i<=n-k+1;++i)
	{
		if (k==1)
		{
			if (a[i] == s)
				t=(t+a[i])%o;
		}
		else
		for (int j=i+1;j<=n-k+2;++j)
		{
			if (k==2)
			{
				int y=a[i];y^=a[j];
				if (y == s)
					t=(t+gcd(a[i],a[j]))%o;
			}
			else
			for (int u=j+1;u<=n-k+3;++u)
			{
				if (k==3)
				{
					int y=a[i];y^=a[j];y^=a[u];
					if (y == s)
						t=(t+gcd(gcd(a[i],a[j]),a[u]))%o;
				}
				else
				for (int v=u+1;v<=n-k+4;++v)
				{
					int y=a[i];y^=a[j];y^=a[u];y^=a[v];
					if (y == s)
						t=(t+gcd(gcd(a[i],a[j]),(a[u],a[v])))%o;
				}
			}
		}
	}
	std::cout<<t<<std::endl;
	return 0;
}

请问谁有简便方法

全部评论

(2) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐