求助万能的谷民一个很小很简单的问题
查看原帖
求助万能的谷民一个很小很简单的问题
115857
too_later楼主2021/9/21 21:23
#include<bits/stdc++.h>
#define I inline
#define RI register int
#define rep(i,a,b) for(RI i=a;i<=b;++i)
#define dow(i,a,b) for(RI i=a;i>=b;--i)
using namespace std;

const int N=3e6+5,mo=998244353,inv2=499122177,inv6=166374059;

struct node{ int f,g,h; node(){ f=h=g=0; } };
I int add(int x,int y){ return x+y>=mo?x+y-mo:x+y; }
I int sub(int x,int y){ return x-y<0?x-y+mo:x-y; }
I int mul(int x,int y){ return 1ll*x*y%mo; }
I int C2(int n){ return 1ll*n*(n+1)/2%mo; }
I int C3(int n){ return 1ll*n*(n+1)%mo*(2*n+1)%mo*inv6%mo; }

int T,n,a,b,c;
I node query(int a,int b,int c,int n){
	node ans,now;
	if(!a){
		ans.f=mul(b/c,n+1);
		ans.g=mul(b/c,C2(n));
		ans.h=mul(mul(b/c,b/c),n+1);
		return ans;
	}
	if(a>=c||b>=c){
		now=query(a%c,b%c,c,n);
		ans.f=add(now.f,add(mul(b/c,n+1),mul(a/c,C2(n))));
		ans.g=add(now.g,add(mul(a/c,C3(n)),mul(b/c,C2(n))));
		ans.h=add(mul(C3(n),mul(a/c,a/c)),add(mul(mul(b/c,b/c),n+1),add(mul(mul(2,a/c),now.g),
			  add(mul(mul(2,b/c),now.f),add(mul(mul(2,a/c),mul(b/c,C2(n))),now.h)))));
		return ans;
	}
	RI m=1ll*(a*n+b)/c;
	now=query(c,c-b-1,a,m-1);
	ans.f=sub(mul(n,m),now.f);
	ans.g=mul(inv2,sub(mul(m,mul(n,n+1)),add(now.f,now.h)));
	ans.h=sub(sub(mul(n,mul(m,m+1)),mul(2,add(now.g,now.f))),ans.f);
	return ans;
}

int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d%d",&n,&a,&b,&c);
		node k=query(a,b,c,n);
		printf("%d %d %d\n",k.f,k.h,k.g);
	}
	return 0;
}

这个代码只有 30 pts,但是 #define int long long 之后就有 100 pts。

那么请问我代码哪里没取模到呢?

2021/9/21 21:23
加载中...