WA 求助
查看原帖
WA 求助
263414
Sktic楼主2020/11/22 21:03

对比了一下题解,感觉好像都一样啊,不知道为什么全WA /youl

样例也能过的,求大佬指点

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
const ll inv2=499122177;
const ll inv6=166374059;
struct node
{
    ll f,g,h;
}; 
node solve(ll a, ll b, ll c, ll n,ll mod)
{
    node ans,tmp;
    if(a==0) 
	{
        ans.f=(n+1)*(b/c)%mod;
        ans.g=(b/c)*n%mod*(n+1)%mod*inv2%mod;
        ans.h=(b/c)*(b/c)%mod*(n+1)%mod;
        return ans;
    }
    else if(a>=c||b>=c)
	{
        tmp=solve(a%c,b%c,c,n,mod);
        ans.f=(tmp.f+(a/c)*n%mod*(n+1)%mod*inv2%mod+(b/c)*(n+1)%mod)%mod;
        ans.g=(tmp.g+(a/c)*n%mod*(n+1)%mod*(2*n+1)%mod*inv6%mod+(b/c)*n%mod*(n+1)%mod*inv2%mod)%mod;
        ans.h=((a/c)*(a/c)%mod*n%mod*(n+1)%mod*(2*n+1)%mod*inv6%mod+(b/c)*(b/c)%mod*(n+1)%mod+(a/c)*(b/c)%mod*n%mod*(n+1)%mod+tmp.h+2*(a/c)%mod*tmp.g%mod+2*(b/c)%mod*tmp.f%mod)%mod;
        return ans;
    }
    else
    {
    	ll m=(a*n+b)/c;
    	tmp=solve(c,c-b-1,a,m-1,mod);
    	ans.f=(n*(m%mod)%mod-tmp.f)%mod;
    	ans.g=(n*(n+1)%mod*(m%mod)%mod-tmp.f-tmp.h)%mod*inv2%mod;
    	ans.h=(n*(m%mod)%mod*((m+1)%mod)%mod-2*tmp.g-2*tmp.f-ans.f)%mod;
    	return ans;	
	}
}
inline ll read()
{
	ll x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-')
			f=-f;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=(x<<3)+(x<<1)+c-'0';
		c=getchar();
	}
	return x*f;
}
int main()
{
	ll t,mod=998244353;
	t=read();
	while(t--)
	{
		ll a,b,c,n;
		n=read(),a=read(),b=read(),c=read();
		node answer=solve(a,b,c,n,mod);
		printf("%lld %lld %lld\n",(answer.f+mod)%mod,(answer.h+mod)%mod,(answer.g+mod)%mod);
	}
	return 0;
}


2020/11/22 21:03
加载中...