首页 > 其他分享 >游戏

游戏

时间:2024-07-31 20:06:12浏览次数:8  
标签:prime 游戏 int inv long cc size

  • 要统计差值为k的数对(i,j)的数量,这种感觉类似于卷积,我们把和差放到幂次中体现,就可以用NTT做到O(ailogai)
  • 其中,对于差值为0的特殊情况,不仅需要减去数自匹配的n种情况,还要除以2
  • NTT要预处理step+倍增法优化,否则会TLE
  • 将游戏每轮的操作抽象为数学函数
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
int a[1000005];
int v[10000005],prime[10000005],m;
long long cnt[1000005],inv[10000005];
long long f[500005];
int rev[5000005],p[5000005][2];
int read1()
{
	char cc=getchar();
	while(!(cc>=48&&cc<=57))
	{
		if(cc=='-')
		{
			break;
		}
		cc=getchar();
	}
	bool f=false;
	int s=0;
	if(cc=='-')
	{
		f=true;
	}
	else
	{
		s=cc-48;
	}
	while(1)
	{
		cc=getchar();
		if(cc>=48&&cc<=57)
		{
			s=s*10+cc-48;
		}
		else
		{
			break;
		}
	}
	if(f==true)
	{
		s=-s;
	}
	return s;
}
int power(int n,int p)
{
	if(p==0)
	{
		return 1;
	}
	long long tmp=power(n,p/2);
	if(p%2==1)
	{
		return tmp*tmp%mod*n%mod;
	}
	return tmp*tmp%mod;
}
void NTT(vector<long long>&f,int opt)
{
	int n=f.size();
	for(int i=1;i<n;i++)
	{
		if(i<rev[i])
		{
			swap(f[i],f[rev[i]]);
		}
	}
	for(int m=2;m<=n;m*=2)
	{
		int k=m/2;
		for(int i=0;i<n;i+=m)
		{
			long long cur=1,step;
			if(opt==1)
			{
				step=p[m][0];
			}
			else
			{
				step=p[m][1];
			}
			for(int j=0;j<k;j++)
			{
				long long tmp=cur*f[i+j+k]%mod;
				f[i+j+k]=(f[i+j]-tmp)%mod;
				f[i+j]=(f[i+j]+tmp)%mod;
				cur=cur*step%mod;
			}
		}
	}
}
vector<long long> operator*(vector<long long>a,vector<long long>b)
{
	vector<long long>c(a.size()+b.size()-1);
	while(c.size()<(1<<22))
	{
		c.push_back(0);
	}
	while(a.size()<c.size())
	{
		a.push_back(0);
	}
	while(b.size()<c.size())
	{
		b.push_back(0);
	}
	NTT(a,1),NTT(b,1);
	for(int i=0;i<c.size();i++)
	{
		c[i]=a[i]*b[i]%mod;
	}
	NTT(c,-1);
	int p=power(c.size(),998244351);
	for(int i=0;i<c.size();i++)
	{
		c[i]=c[i]*p%mod;
	}
	return c;
}
vector<long long>c,c1(2000001),c2(2000001);
int main()
{
	for(int i=1;i<(1<<22);i++)
	{
		rev[i]=(rev[i>>1]>>1);
		if(i&1)
		{
			rev[i]+=(1<<21);
		}
	}
	for(int i=1;i<=22;i++)
	{
		p[1<<i][0]=power(3,998244352/(1<<i));
		p[1<<i][1]=power(3,998244352-998244352/(1<<i));
	}
	inv[1]=1;
	for(int i=2;i<=10000000;i++)
	{
		if(v[i]==0)
		{
			v[i]=i;
			prime[++m]=i;
			inv[i]=power(i,998244351);
		}
		for(int j=1;j<=m;j++)
		{
			if(i*prime[j]>10000000||prime[j]>v[i])
			{
				break;
			}
			v[i*prime[j]]=prime[j];
			inv[i*prime[j]]=inv[i]*inv[prime[j]]%mod;
		}
	}
	long long n,t;
	cin>>n>>t;
	for(int i=1;i<=n;i++)
	{
		a[i]=read1();
		c1[a[i]+1000000]++;
		c2[-a[i]+1000000]++;
	}
	c=c1*c2;
	for(int i=0;i<1000000;i++)
	{
		cnt[i]=c[-i+2000000];
	}
	cnt[0]-=n;
	cnt[0]=cnt[0]*power(2,998244351)%mod;
	long long p1=(n-2)*power((n*(n-1)/2)%mod,998244351)%mod,p1inv=power(p1,998244351);
	vector<long long>a(t+1);
	a[0]=power(p1,t);
	a[1]=power(p1,t-1)*(1-2*p1)%mod*t%mod;
	for(int i=1;i<t;i++)
	{
		a[i+1]=((1-2*p1)%mod*a[i]%mod*t%mod+2*p1*t%mod*a[i-1]%mod-i*a[i]%mod*(1-2*p1)%mod-a[i-1]*(i-1)%mod*p1%mod)%mod*inv[i+1]%mod*p1inv%mod;
	}
	long long ans=0;
	for(int i=max(0ll,t-1000000);i<=t;i++)
	{
		ans=(ans+cnt[t-i]*a[i]%mod)%mod;
	}
	cout<<(ans+mod)%mod<<endl;
	return 0;
}

标签:prime,游戏,int,inv,long,cc,size
From: https://www.cnblogs.com/watersail/p/18335375

相关文章

  • 扫雷游戏简易版(十五)
    这个扫雷游戏算是我学习编程来遇到的第一个障碍,确实考验一个人的数学思维与编程思维,也和一个人的逻辑思维能力密切相关,这是扫雷学习也是几天了,算是半只脚进来了,但还是没掌握完全,以后每天还要找出时间来复习这个扫雷游戏。遇到困难别放弃,当你坚持下来后,你会觉得原来自己这么叼,......
  • UE4 C++ 多人游戏中的简单聊天窗口
    本质不管是客户端还是服务器在输入文字后,按下回车发送,将触发RPC调用。然后通过RPC将发送者,输入文本等信息,传入到服务器,然后通过多播RPC传播到所有客户端的聊天框。UIUI利用三个组件ScrollBox用于在服务器以及每个客户端上显示消息的载体TextBlock本地将信息通过一个一个的T......
  • 关系妄想型精神分裂的我,还是待在家里开发游戏比较合适,过段时间,我继续给大家我新游戏的
    我有关系妄想型精神分裂症,例如两个事物,只有少量部分相似,我就猜疑这两个事物是一个事物。就是一阵子乱关联,过段时间后,脑子就清醒了,知道是乱关联,明白两个事物之间,根本就没关系。我也在努力治愈自己,乱关联之后,过段时间,我就会反省自己,我告诉自己,是我乱关联,是我的关系妄想型精神分......
  • 《极限竞速:地平线5》游戏提示缺少kernel32.dll怎么处理?极限竞速地平线5游戏弹窗“缺少
    当游戏弹窗提示“缺少kernel32.dll”时,别慌张。现在为您介绍有效的修复方法。您可以尝试重新注册该动态链接库文件,或者从可靠来源下载并安装。同时,检查系统更新和修复可能存在的系统错误,本篇将为大家带来游戏提示缺少kernel32.dll修复方法的内容,感兴趣的小伙伴们一起来看看吧,希......
  • 《上古卷轴5》游戏崩溃提示缺少X3DAudio1_7.dll怎么办?上古卷轴5游戏弹窗“缺少X3DAudi
    在玩《上古卷轴5》时,游戏崩溃并提示缺少X3DAudio1_7.dll让人十分困扰。这一问题可能影响您的游戏体验。现在为您详细说明此情况,可能是文件缺失、损坏或是系统与游戏不兼容等原因导致,需针对性解决。本篇将为大家带来《上古卷轴5》游戏崩溃提示缺少X3DAudio1_7.dll修复方法的内容......
  • 《绝地求生》游戏运行提示缺少dxgi.dll文件怎么处理?绝地求生游戏崩溃找不到dxgi.dll修
    在玩绝地求生时,游戏崩溃并提示找不到dxgi.dll令人烦恼。别担心,现在为您介绍几种有效的修复方法。可能需要重新安装相关组件,或者通过系统修复工具进行处理等。本篇将为大家带来绝地求生游戏崩溃找不到dxgi.dll修复方法的内容,感兴趣的小伙伴们一起来看看吧,希望能够帮助到大家。......
  • 《收获日3》游戏提示“缺失binkw32.dll”文件怎么处理?收获日3弹窗“缺失binkw32.dll”
    在玩《收获日3》时,遇到弹窗提示“缺失binkw32.dll”的问题令人困扰。别着急,这里为您提供有效的处理方法。可能需要重新安装相关组件,或者从特定网站下载该文件等。本篇将为大家带来弹窗“缺失binkw32.dll”处理方法的内容,感兴趣的小伙伴们一起来看看吧,希望能够帮助到大家。弹......
  • 文字格斗游戏
    文字格斗游戏importjava.util.Random;publicclassRole{privateStringname;privateintblood;publicRole(){}publicRole(Stringname,intblood){this.name=name;this.blood=blood;}publicStringget......
  • 中国游戏出海启示录:2024市场复苏下的对策
    2024年,全球游戏市场迎来了新的复苏浪潮。根据《2023年中国游戏出海研究报告》的数据,全球游戏市场规模达到了11773.79亿元,同比增长6.00%。然而,在这股复苏的浪潮中,中国游戏出海企业却面临着前所未有的挑战。人民币收付:跨境电商的痛点对于外国的跨境电商来说,进入中国市场是一个充满......
  • unity2D游戏开发16弹弓动画
    清理动画器选中PlayerObject,打开Animator,删除原来的四个状态右键选择CreateState|fromNewBlendTree;冲命名为WalkTree双击WalkTree查看BlendTreeGraph设置属性为2DSimpleDirectional,再点击加号选择AddMotionField添加四个,如图点击BaseLayer......