QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#689119 | #983. The Hash Table | nullptr_qwq | AC ✓ | 64ms | 3692kb | C++20 | 2.2kb | 2024-10-30 15:25:39 | 2024-10-30 15:25:40 |
Judging History
answer
// 私は猫です
#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define mkp make_pair
#define fi first
#define se second
#define inf 1000000000
#define infll 1000000000000000000ll
#define pii pair<int,int>
#define rep(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
#define per(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
#define F(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define dF(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define cmh(sjy) while(sjy--)
#define lowbit(x) (x&(-x))
#define HH printf("\n")
#define eb emplace_back
#define poly vector<int>
#define SZ(x) ((int)x.size())
using namespace std;
ll read(){
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*f;
}
template<typename T>inline void chkmax(T &x,const T &y){ x=std::max(x,y); }
template<typename T>inline void chkmin(T &x,const T &y){ x=std::min(x,y); }
const int mod=998244353,maxn=500005;
ll func(ll a,ll b,ll c,ll N){
if(!a)return b/c*(N+1);
if(a>=c||b>=c)
return (a/c)*N*(N+1)/2+(b/c)*(N+1)+func(a%c,b%c,c,N);
ll M=(a*N+b)/c;
return N*M-func(c,c-b-1,a,M-1);
}
ll calc(int n,int a,int b,int c,int t){
if(a<0)b+=(n-1)*a,a=-a;
if(b<0){
if(!a)return 0;
int tmp=(a-b-1)/a;
n-=tmp,b+=a*tmp;
}
return (n>0)?func(a,b,c,n-1)+t*n:0;
}
vector<array<int,3>>pr;
int n,m;
ll ans=0;
void dfs(int u,int a,int b,int qwq){
if(u>=SZ(pr)){
ll res=0;
F(c,0,1)F(d,0,1)if(!((c*a+b*d)&1)){
int x=((n-1)/a-c)>>1,y=(((n-1)<<1)/a-c)>>1;
if(x>=0)res+=calc(x+1,a,(c*a-b*d)>>1,b,d)-calc(x+1,-a,n-1-((a*c+b*d)>>1),b,d);
if(y>=0)res+=calc(y+1,-a,n-1-((c*a+b*d)>>1),b,d);
}
ans+=1ll*qwq*res;
return;
}
int t=1,val=pr[u][2];
F(i,0,pr[u][1]){
dfs(u+1,a*t,b*val/t,qwq);
if(i<pr[u][1])dfs(u+1,a*t*pr[u][0],b*val/t,-qwq);
t*=pr[u][0];
}
}
void solve(){
n=read(),m=read(),pr.clear(),ans=0;
F(i,2,sqrt(m))if(m%i==0){
int cnt=0,val=1;
for(;m%i==0;m/=i)++cnt,val*=i;
pr.push_back({i,cnt,val});
}
if(m>1)pr.push_back({m,1,m});
dfs(0,1,1,1),cout<<ans<<endl;
}
signed main(){
const int zsy=read();
F(____,1,zsy)solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3680kb
input:
3 5 4 1234 5678 5 4
output:
4 229 4
result:
ok 3 tokens
Test #2:
score: 0
Accepted
time: 1ms
memory: 3692kb
input:
5 919191919 998244353 919191919 308308924 124312512 700980343 199712020 199712020 1000000000 1000000000
output:
420069742 18975162173 34523625 619107226 36400000000
result:
ok 5 tokens
Test #3:
score: 0
Accepted
time: 0ms
memory: 3492kb
input:
5 351177178 2 236814804 3 406487669 4 107706571 5 206252441 6
output:
30831352411422332 15578125268692158 41308056059019556 2088126907497711 5908342860201211
result:
ok 5 tokens
Test #4:
score: 0
Accepted
time: 50ms
memory: 3632kb
input:
5 795965436 698377680 775372176 735134400 891189723 555660000 255414898 555660000 649803503 967458816
output:
252131828509 252898591532 196092107465 16019483439 23110007395
result:
ok 5 tokens
Test #5:
score: 0
Accepted
time: 64ms
memory: 3560kb
input:
5 980056074 669278610 786804145 536870912 94743614 669278610 925596206 551350800 277753133 735134400
output:
151494104505 16332684795 1386109471 391665329539 32367779875
result:
ok 5 tokens
Test #6:
score: 0
Accepted
time: 64ms
memory: 3648kb
input:
5 407928831 901800900 959460685 551350800 929921323 901800900 880362378 551350800 169887581 551350800
output:
24176516170 420863755861 126194540248 354298688005 13128893811
result:
ok 5 tokens
Test #7:
score: 0
Accepted
time: 1ms
memory: 3632kb
input:
5 755923335 903960666 248398318 89883150 32020160 729647777 48000958 745177909 261977197 120541067
output:
5122927135 10499768724 1250410 5736978 980686184
result:
ok 5 tokens
Test #8:
score: 0
Accepted
time: 1ms
memory: 3604kb
input:
5 120618885 904615503 860299168 970357266 2922308 99586084 116144876 802899228 621873179 98196855
output:
72362680 1890408813 77476 180492837 23279216759
result:
ok 5 tokens
Test #9:
score: 0
Accepted
time: 1ms
memory: 3692kb
input:
5 337929091 905270340 472298323 850733078 973824456 50926103 184354331 860587779 981801929 75885412
output:
2695205304 791722210 18137207967 13641011 50173808550
result:
ok 5 tokens
Test #10:
score: 0
Accepted
time: 2ms
memory: 3676kb
input:
5 725900160 906132534 140660629 407214962 935092856 84357639 706890499 221743500 461717852 516104007
output:
3448528660 288899219 61675795925 96294825272 475220310
result:
ok 5 tokens
Test #11:
score: 0
Accepted
time: 1ms
memory: 3556kb
input:
5 943210366 906787371 752627016 287590774 905995005 183214075 775132721 279464819 821646602 493792564
output:
11587484479 1606204266 21788486368 3802176853 10347608659
result:
ok 5 tokens
Test #12:
score: 0
Accepted
time: 1ms
memory: 3560kb
input:
5 943210366 900720143 752627016 900720143 905995005 942060233 775132721 942060233 821646602 962178361
output:
1522977645 931104902 1306217667 941841841 691366758
result:
ok 5 tokens