NC14295. Mod
描述
输入描述
第一行一个询问组数。
接下来每一行x,P,Q,L,R,T,S。
输出描述
每行一个答案。
示例1
输入:
2 77 -129 383 -575 86 515 -464 992 115 926 351 536 543 655
输出:
492 146
C++ 解法, 执行用时: 245ms, 内存消耗: 1060K, 提交时间: 2022-06-07 09:53:12
#include<bits/stdc++.h> #ifdef xay5421 #define D(...) fprintf(stderr,__VA_ARGS__) #define DD(...) D(#__VA_ARGS__ "="),debug_helper::debug(__VA_ARGS__),D("\n") #include"/home/xay5421/debug.hpp" #else #define D(...) ((void)0) #define DD(...) ((void)0) #endif #define pb push_back #define eb emplace_back #define SZ(x) ((int)(x).size()) #define each(x,v) for(auto&x:v) #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define per(i,a,b) for(int i=(a);i>=(b);--i) template<class T>void rd(T&x){int f=0,c;while(!isdigit(c=getchar()))f^=!(c^45);x=(c&15);while(isdigit(c=getchar()))x=x*10+(c&15);if(f)x=-x;} template<class T>void pt(T x,int c=-1){if(x<0)putchar('-'),x=-x;if(x>9)pt(x/10);putchar(x%10+48);if(c!=-1)putchar(c);} using namespace std; using LL=long long; using ULL=unsigned long long; ULL C2(LL n){ if(n&1)return 1ULL*n*((n-1)>>1); else return 1ULL*(n>>1)*(n-1); } ULL sol(LL n,LL a,LL b,LL c){ if(!n)return 0; if(!a)return ULL(n)*(b/c); if(a>=c||b>=c){ return sol(n,a%c,b%c,c)+1ULL*(b/c)*n+1ULL*(a/c)*C2(n); } LL m=((__int128)a*(n-1)+b)/c; return 1ULL*(n-1)*m-sol(m,c,c-b-1,a); } ULL calc(LL x,LL S,LL R,LL Q,LL T){ return sol(R,S,x+T,T)-sol(R,S,x+T-Q,T); ULL ret=0; for(LL k=0;k<R;++k){ ret+=(x+k*S+T)/T; } for(LL k=0;k<R;++k){ ret-=(x+k*S+T-Q)/T; } return ret; } int main(){ #ifdef xay5421 freopen("a.in","r",stdin); #endif int tc; rd(tc); while(tc--){ LL x,P,Q,L,R,T,S; rd(x),rd(P),rd(Q),rd(L),rd(R),rd(T),rd(S); x=(x%T+T)%T; S=(S%T+T)%T; LL tmp=(-L+T-1)/T; L+=tmp*T,R+=tmp*T; P=max(P,0LL); Q=min(Q,T); if(L>=R||P>=Q){ puts("0"); continue; } printf("%lld\n",(calc(x,S,R,Q,T)-calc(x,S,R,P,T))-(calc(x,S,L,Q,T)-calc(x,S,L,P,T))); } return 0; }