QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#550882 | #9248. An Easy Math Problem | ucup-team052# | Compile Error | / | / | C++20 | 3.5kb | 2024-09-07 14:34:07 | 2024-09-07 14:34:08 |
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:34:08]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-09-07 14:34:07]
- 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 Poly
{
vector<int> rev,rt,one(1,1);
int __inv[2000005];
const int G=3;
void Init_Inv()
{
__inv[0]=__inv[1]=1;
for(int i=2;i<=2000000;i++) __inv[i]=mul(mod-mod/i,__inv[mod%i]);
}
vector<int> operator + (vector<int> a,vector<int> b)
{
int n=max(a.size(),b.size());
a.resize(n),b.resize(n);
for(int i=0;i<n;i++) a[i]=add(a[i],b[i]);
return a;
}
vector<int> operator - (vector<int> a,vector<int> b)
{
int n=max(a.size(),b.size());
a.resize(n),b.resize(n);
for(int i=0;i<n;i++) a[i]=sub(a[i],b[i]);
return a;
}
void init(int B)
{
int n=1<<B;
rev.resize(n),rt.resize(n);
for(int i=1;i<n;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(B-1));
for(int mid=1;mid<n;mid<<=1)
{
int w=qpow(G,(mod-1)/(mid<<1));
rt[mid]=1;
for(int i=1;i<mid;i++) rt[mid+i]=mul(rt[mid+i-1],w);
}
}
void ntt(vector<int> &a,int B)
{
for(int i=0;i<(int)a.size();i++) if(rev[i]>i) swap(a[rev[i]],a[i]);
for(int i=1;i<1<<B;i<<=1)
{
for(int j=0;j<1<<B;j+=i<<1)
{
for(int k=0;k<i;k++)
{
int x=a[j+k],y=mul(a[i+j+k],rt[i+k]);
a[j+k]=add(x,y),a[i+j+k]=sub(x,y);
}
}
}
}
void idft(vector<int> &a,int B)
{
reverse(a.begin()+1,a.end()); ntt(a,B);
int I=Inv(1<<B);
for(int i=0;i<(int)a.size();i++) a[i]=mul(a[i],I);
}
vector<int> operator * (vector<int> x,vector<int> y)
{
int n=x.size()+y.size()-1;
int B=0; while(1<<B<n) B++;
x.resize(1<<B),y.resize(1<<B);
// init(B);
ntt(x,B),ntt(y,B);
for(int i=0;i<1<<B;i++) x[i]=mul(x[i],y[i]);
idft(x,B);
x.resize(n);
int s=x.size();
while(s>p-1)
{
x[s-p]=add(x[s-p],s[s-1]);
s--,x.pop_back();
}
return x;
}
};
using namespace Poly;
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]]]++;
int B=0; while(1<<B<(p+p)) B++;
init(B);
vector<int> ans(1,1),f(a,a+p-1);
for(int i=l;i>=1;i--)
{
if(k[i]=='1') ans=ans*f;
f=f*f;
}
printf("%d\n",f[lg[x]]);
return 0;
}
Details
answer.code: In function ‘std::vector<int> Poly::operator*(std::vector<int>, std::vector<int>)’: answer.code:125:44: error: invalid types ‘int[int]’ for array subscript 125 | x[s-p]=add(x[s-p],s[s-1]); | ^ answer.code: In function ‘int main()’: answer.code:137:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 137 | scanf("%s",k+1); int l=strlen(k+1); | ~~~~~^~~~~~~~~~