QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#620042#9435. Welcome to NPCAPCucup-team4352#Compile Error//C++232.0kb2024-10-07 16:25:482024-10-07 16:26:30

Judging History

你现在查看的是最新测评结果

  • [2024-10-07 16:26:30]
  • 评测
  • [2024-10-07 16:25:48]
  • 提交

answer

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

const ll mod=998244353;
struct Matrix {
    vector<vector<ll>> a;

    inline void init(int n,int m) {
        a=vector<vector<ll>>(n,vector<ll>(m,0));
    }

    friend Matrix operator*(Matrix x,Matrix y) {
        auto &a=x.a,&b=y.a;
        vector<vector<ll>> ans(a.size(),vector<ll>(b[0].size(),0));

        for(int i=0;i<a.size();i++) {
            for(int j=0;j<b[0].size();j++) {
                ll sum=0;
                for(int k=0;k<a[0].size();k++) {
                    sum=(sum+a[i][k]*b[k][j]%mod)%mod;
                }
                ans[i][j]=sum;
            }
        }
        return Matrix{ans};
    }

    void print() {
        for(int i=0;i<a.size();i++) {
            for(int j=0;j<a[0].size();j++) {
                cout<<a[i][j]<<" ";
            }cout<<endl;
        }
    }
};

Matrix qm(Matrix a,ll b) {
    Matrix ans;
    ans.init(a.a.size(),a.a.size());
    for(int i=0;i<ans.a.size();i++) ans.a[i][i]=1;

    while(b) {
        if(b&1) ans=ans*a;
        a=a*a;
        b>>=1;
    }
    return ans;
}

Matrix base,base0;
ll n;
Matrix p0[1024],p1[1024],p2[1024];
void solve() {
    cin>>n;
	Matrix tmp=p0[n&1023]*p1[n>>10&1023];
	int ans=0;
	for(int i=0;i<49;i++){
		ans=ans+1ll*tmp.a[0][i]*p2[n>>20&1023].a[i][48]%p;
		if(ans>=p)ans-=p;
	}
	cout<<ans<<"\n";
}
/*

*/
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    base=Matrix{
        vector<vector<ll>>(49,vector<ll>(49,0))
    };
	base0=base;
	for(int i=0;i<49;i++)base0.a[i][i]=1;
    for(int i=0;i<49;i++) {
		base.a[i][i]=50;
		if(i+7<49)base.a[i][i+7]++;
		else base.a[i][i]++;
		if(i%7<6)base.a[i][i+1]++;
		else base.a[i][i]++;
    }
	p0[0]=p1[0]=p2[0]=base0;
	p0[1]=qm(base,1);
	p1[1]=qm(base,1024);
	p2[1]=qm(base,1024*1024);
    for(int i=2;i<1024;i++){
		p0[i]=p0[i-1]*p0[1];
		p1[i]=p1[i-1]*p1[1];
		p2[i]=p2[i-1]*p2[1];
	}

    int t=1;
    cin>>t;
    while(t--)
    solve();
}

Details

answer.code: In function ‘void solve()’:
answer.code:59:65: error: ‘p’ was not declared in this scope
   59 |                 ans=ans+1ll*tmp.a[0][i]*p2[n>>20&1023].a[i][48]%p;
      |                                                                 ^