QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#550849#9248. An Easy Math Problemucup-team052#Compile Error//C++232.5kb2024-09-07 14:28:522024-09-07 14:28:52

Judging History

This is the latest submission verdict.

  • [2024-10-31 22:36:43]
  • hack成功,自动添加数据
  • (/hack/1098)
  • [2024-10-31 22:13:58]
  • hack成功,自动添加数据
  • (/hack/1096)
  • [2024-10-31 22:00:43]
  • hack成功,自动添加数据
  • (/hack/1095)
  • [2024-09-07 14:28:52]
  • Judged
  • [2024-09-07 14:28:52]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define mod 998244353
int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
int sub(int x,int y) {return x-y<0?x-y+mod:x-y;}
int mul(int x,int y) {return 1ULL*x*y%mod;}
#define N 5005
char k[N];
int p,x,g,pw[N],lg[N],vis[N];
int C[N][N];
int a[N];
const int i2=(mod+1)/2;
int Inv(int x)
{
	int y=mod-2,ans=1;
	while(y)
	{
		if(y&1) ans=mul(ans,x);
		x=mul(x,x),y>>=1;
	}
	return ans;
}
int qpow(int x,int y)
{
	int ans=1;
	while(y)
	{
		if(y&1) ans=mul(ans,x);
		x=mul(x,x),y>>=1;
	}
	return ans;
}
void dft(int f[])
{
	static int g[N];
	for(int i=0;i<p-1;i++)
	{
		g[i]=0;
		for(int j=0;j<p-1;j++) g[i]=add(g[i],mul(f[j],pw[i*j%(p-1)]));
	}
	for(int i=0;i<p-1;i++) f[i]=g[i];
}
void idft(int f[])
{
	static int g[N];
	for(int i=0;i<p-1;i++)
	{
		g[i]=0;
		for(int j=0;j<p-1;j++) g[i]=add(g[i],mul(f[j],pw[(p-1-i)*j%(p-1)]));
	}
	for(int i=0;i<p-1;i++) f[i]=g[i];
}
namespace fft
{
#define u64 unsigned long long
const int M=16400;
int rev[M],wn[M],lim,invlim;
void init(int len)
{
	lim=2<<std::lg(len-1);
	invlim=mod-(mod-1)/lim;
	for(static int i=1;i<lim;i+=i)
	{
		wn[i]=1;
		const int w=qpow(3,mod/i/2);
		for(int j=1;j<i;j++) wn[i+j]=(u64)wn[i+j-1]*w%mod;
	}
	for(int i=1;i<lim;i++) rev[i]=rev[i>>1]>>1|(i%2*lim/2);
}
void DFT(int *a)
{
	static u64 t[M];
	for(int i=0;i<lim;i++) t[i]=a[rev[i]];
	for(int i=1;i<lim;i+=i)
	{
		for(int k=i&(1<<19);k--;) if(t[k]>=mod*9ull) t[k]-=mod*9ull;
		for(int j=0;j<lim;j+=i+i)
		{
			for(int k=0;k<i;k++)
			{
				const u64 x=mul(t[i+j+k],wn[i+k]);
				t[i+j+k]=t[k+j]+(mod-x);
				t[k+j]+=x;
			}
		}
	}
	for(int i=0;i<lim;i++) a[i]=t[i]%mod;
}
void IDFT(int *a)
{
	DFT(a);
	reverse(a+1,a+lim);
	for(int i=0;i<lim;i++) a[i]=mul(a[i],invlim);
}
};
int b[N];
signed main() {
#ifdef xay5421
	freopen("b.in","r",stdin);
#endif
	scanf("%s",k+1); int l=strlen(k+1);
	cin>>p>>x;
	for(int i=2;i<p;i++)
	{
		g=i;
		memset(vis,0,sizeof(vis));
		int ok=1,cur=1;
		for(int j=0;j<p-1;j++)
		{
			if(vis[cur]) ok=0;
			pw[j]=cur,lg[cur]=j;
			vis[cur]=1,cur=cur*g%p;
		}
		if(ok) break;
	}
	pw[0]=1;
	for(int i=1;i<p;i++) pw[i]=mul(pw[i-1],g);
	cout<<g<<endl;
	for(int j=1;j<p-1;j++) printf("%d%c",lg[j]," \n"[j==p-2]);
	C[0][0]=1;
	for(int i=1;i<=p;i++)
	{
		C[i][0]=1;
		for(int j=1;j<=i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%p;
	}
	for(int i=0;i<p;i++) for(int j=0;j<p;j++) if(C[i][j]) a[lg[C[i][j]]]++;
	
	return 0;
}
/*
3
0 2 1 4 5
1356
623902763
*/

Details

answer.code: In function ‘void fft::init(int)’:
answer.code:62:21: error: ‘lg’ is not a member of ‘std’; did you mean ‘log’?
   62 |         lim=2<<std::lg(len-1);
      |                     ^~
      |                     log
answer.code: In function ‘int main()’:
answer.code:103:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  103 |         scanf("%s",k+1); int l=strlen(k+1);
      |         ~~~~~^~~~~~~~~~