QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#737740 | #9631. Median Replacement | hezlik# | WA | 416ms | 3864kb | C++20 | 3.4kb | 2024-11-12 16:45:36 | 2024-11-12 16:45:37 |
Judging History
answer
#include <bits/stdc++.h>
typedef long long int64;
typedef long double db;
const int N=150,mod=1000000007;
int inv[N+9],fac[N+9],ifac[N+9];
void Init(int n){
inv[1]=1;
fac[0]=fac[1]=1;
ifac[0]=ifac[1]=1;
for (int i=2;i<=n;++i){
inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod;
fac[i]=1LL*fac[i-1]*i%mod;
ifac[i]=1LL*ifac[i-1]*inv[i]%mod;
}
}
int Lagrange(const std::vector<int> &val,int x){
int n=val.size();
std::vector<int> p(n),s(n);
p[0]=x%mod;
for (int i=1;i<n;++i)
p[i]=1LL*p[i-1]*(x+mod-i)%mod;
s[n-1]=(x+mod-(n-1))%mod;
for (int i=n-2;i>=0;--i)
s[i]=1LL*s[i+1]*(x+mod-i)%mod;
int res=0;
for (int i=0;i<n;++i){
int t=1LL*val[i]*ifac[i]%mod*ifac[n-i-1]%mod;
if (i) t=1LL*t*p[i-1]%mod;
if (i+1!=n) t=1LL*t*s[i+1]%mod;
res=((n-i)&1?(res+t):(res+mod-t))%mod;
}
return res;
}
int n;
std::pair<int,int> a[N+9];
std::vector<int> ord;
void Read(){
std::cin>>n;
ord.clear();
for (int i=1;i<=n;++i){
std::cin>>a[i].first;
--a[i].first;
ord.push_back(a[i].first);
}
for (int i=1;i<=n;++i){
std::cin>>a[i].second;
ord.push_back(a[i].second);
}
ord.push_back(0);
}
// void upd(const int &x,const int &y,int &z){z=(z+1LL*x*y)%mod;}
int dp[N+9][3],res[N+9];
int DP(int pl,int pr,int x){
// std::cerr<<" "<<pl<<' '<<pr<<' '<<x<<'\n';
// std::vector<std::vector<int>> dp(n+1,std::vector<int>({0,0,0}));
// std::vector<int> res(n+1);
// auto upd=[&](int x,int y,int &z){z=(z+1LL*x*y)%mod;};
// for (int i=0;i<=n;++i){
// for (int j=0;j<3;++j) dp[i][j]=0;
// res[i]=0;
// }
dp[0][0]=1;dp[0][1]=dp[0][2]=res[0]=0;
for (int i=1;i<=n;++i){
// std::cerr<<" "<<i<<'\n';
int c[2];
auto [l,r]=a[i];
if (r<=pl){
c[0]=r-l;
c[1]=0;
}else if (l>=pr){
c[0]=0;
c[1]=r-l;
}else{
c[0]=x-1-l;
c[1]=r-x+1;
}
// std::cerr<<" "<<i<<' '<<l<<' '<<r<<'\n';
// upd(dp[i-1][0],c[0],dp[i][0]);
// upd(dp[i-1][0],c[1],dp[i][1]);
// upd(dp[i-1][1],c[0],dp[i][2]);
// upd(dp[i-1][1],c[1],res[i]);
// upd(dp[i-1][2],c[0],dp[i][0]);
// upd(dp[i-1][2],c[1],res[i]);
// upd(res[i-1],(c[0]+c[1])%mod,res[i]);
dp[i][0]=(1LL*dp[i-1][0]*c[0]+1LL*dp[i-1][2]*c[0])%mod;
dp[i][1]=(1LL*dp[i-1][0]*c[1])%mod;
dp[i][2]=(1LL*dp[i-1][1]*c[0])%mod;
res[i]=((1LL*dp[i-1][1]*c[1]+1LL*dp[i-1][2]*c[1])%mod+1LL*res[i-1]*(c[0]+c[1]))%mod;
// std::cerr<<" "<<i<<' '<<l<<' '<<r<<'\n';
}
// std::cerr<<" "<<pl<<' '<<pr<<' '<<x<<" : "<<res[n]<<'\n';
return res[n];
}
int Solve(int l,int r){
std::vector<int> val(n+3);
for (int i=0;i<n+3;++i){
val[i]=DP(l,r,i);
if (i) val[i]=(val[i]+val[i-1])%mod;
}
// return val[0];
return (Lagrange(val,r)-Lagrange(val,l)+mod)%mod;
}
void Solve(){
std::sort(ord.begin(),ord.end());
ord.erase(std::unique(ord.begin(),ord.end()),ord.end());
// std::cerr<<" ord :";
// for (int p:ord)
// std::cerr<<' '<<p;
// std::cerr<<'\n';
int ans=0;
for (int i=0;i+1<(int)ord.size();++i)
ans=(ans+Solve(ord[i],ord[i+1]))%mod;
std::cout<<ans<<'\n';
}
void work(){
Read();
Solve();
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t=1;
std::cin >> t;
Init(N+7);
while (t--) {
work();
}
}
/*
2
3
1 1 1
1 1 1
3
1 1 1
1 2 2
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3864kb
input:
10 5 5 1 4 3 2 14 2 5 3 2 5 4 5 1 2 3 13 7 1 2 3 5 5 2 5 3 1 10 2 12 3 2 5 5 5 3 1 5 57 5 3 1 5 5 2 2 3 3 5 4 5 4 4 5 5 4 5 3 5 3 13 7 3 5 3 5 5 1 4 2 3 14 3 4 2 3 5 1 2 5 4 5 2 8 5 7 5 5 1 1 3 5 1 8 2 3 8 1 5 4 4 4 2 3 5 10 5 2 3
output:
180 170 650 265 182 173 120 296 192 131
result:
ok 10 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 3592kb
input:
10 5 1 2 2 5 3 6 4 2 6 3 5 4 4 1 4 3 6 7 2 5 3 5 5 3 4 2 4 5 7 5 2 6 5 1 5 3 5 2 7 7 3 5 2 5 1 3 3 2 2 10 5 3 2 2 5 4 4 4 5 3 4 11 9 5 3 5 5 3 2 1 3 13 5 2 1 5 5 5 4 1 2 5 10 6 1 2 5 5 3 5 3 4 2 5 9 3 5 2 5 1 1 3 2 1 7 3 3 3 1
output:
120 230 144 110 110 289 324 89 140 122
result:
ok 10 lines
Test #3:
score: 0
Accepted
time: 0ms
memory: 3864kb
input:
10 5 3 1 3 4 4 9 1 3 10 4 5 1 1 3 1 1 9 1 3 3 1 5 5 1 2 3 1 74 1 2 3 1 5 2 5 5 3 4 5 6 8 3 4 5 2 1 3 4 5 2 4 6 4 5 5 2 4 2 1 3 2 11 3 2 3 5 1 5 4 4 2 1 14 6 6 2 5 4 1 3 5 1 9 2 4 5 1 5 4 1 2 4 4 6 1 6 4 4 5 3 2 5 3 5 8 8 5 3 5
output:
196 76 140 172 72 80 486 84 65 224
result:
ok 10 lines
Test #4:
score: 0
Accepted
time: 0ms
memory: 3564kb
input:
10 5 676437428 903889545 700650370 965758082 146716866 676437431 903889567 700650370 965758082 146716866 5 517457740 64600397 388618400 783268973 388618400 517457797 64600397 388618400 783268973 388618400 5 971452763 106948541 259878781 537741075 9504353 971452780 106948544 259878781 537741075 95043...
output:
157838571 539867046 711272106 123881231 497944943 9791579 539012259 963879245 315607794 495624077
result:
ok 10 lines
Test #5:
score: 0
Accepted
time: 0ms
memory: 3660kb
input:
10 5 462008700 417744555 925098328 70231697 547596413 462008735 417744555 925098328 70231697 547596413 5 294230630 403894618 294230635 403894620 403894617 294230638 403894620 294230635 403894620 403894617 5 757647830 757647826 757647828 184694646 161891480 757647839 757647827 757647830 184694646 161...
output:
713470735 905154643 458869425 477055327 633375786 349097981 980046476 478461437 573246310 810688575
result:
ok 10 lines
Test #6:
score: 0
Accepted
time: 18ms
memory: 3788kb
input:
10 150 7 1 8 8 2 3 8 2 1 3 2 10 9 7 3 9 4 5 4 5 10 7 9 9 9 3 4 7 10 8 5 3 5 1 8 4 1 2 7 9 10 9 1 7 4 7 6 8 7 6 6 7 4 5 10 8 7 10 2 8 1 4 9 2 9 3 9 6 2 2 7 7 10 8 4 10 4 1 7 3 3 5 4 3 9 7 4 1 8 1 4 4 2 7 5 4 9 6 5 8 6 4 8 7 4 6 8 8 2 9 8 3 10 9 2 4 6 10 2 8 9 1 6 6 7 8 8 7 8 8 8 3 4 6 3 8 10 10 10 3 ...
output:
8640 8000 9600 8100 9360 9900 9600 9960 9300 5560
result:
ok 10 lines
Test #7:
score: 0
Accepted
time: 18ms
memory: 3640kb
input:
10 150 5 4 2 6 6 9 4 8 4 9 2 5 4 7 5 4 2 1 10 10 6 5 10 2 5 8 4 2 10 4 10 8 4 1 4 1 6 3 2 4 1 10 10 1 9 7 7 4 7 6 9 2 4 5 2 6 2 9 10 6 6 8 7 7 1 9 1 7 5 3 4 9 5 2 3 2 10 2 9 3 1 3 7 9 8 3 7 2 2 8 8 5 2 4 8 4 10 10 2 1 10 8 10 3 7 1 6 9 9 7 8 1 9 3 7 6 4 9 1 2 7 8 4 8 6 7 4 2 7 3 9 5 6 6 1 1 9 6 3 6 ...
output:
5760 9600 6580 7680 5280 7200 8640 8000 5400 5040
result:
ok 10 lines
Test #8:
score: 0
Accepted
time: 18ms
memory: 3536kb
input:
10 150 1 1 7 5 2 6 5 9 10 2 5 9 10 10 9 5 2 2 8 7 2 10 9 5 10 4 4 10 3 1 3 8 5 8 3 5 9 4 2 1 4 1 3 2 5 4 4 7 10 2 7 10 9 9 1 1 2 4 7 2 1 4 2 4 5 1 6 6 6 5 10 3 7 5 7 7 7 4 3 3 3 5 3 9 9 8 5 7 5 5 1 5 1 5 7 2 1 8 7 7 7 3 8 6 7 8 4 5 10 7 5 7 4 8 7 2 6 6 7 6 2 1 6 6 8 9 3 9 2 7 9 1 2 1 7 7 4 3 3 1 4 3...
output:
8800 8100 5040 5580 9600 7200 6400 5184 7560 8640
result:
ok 10 lines
Test #9:
score: -100
Wrong Answer
time: 416ms
memory: 3512kb
input:
10 150 390717977 225426217 217154512 811659013 811659022 811659006 811659019 811658998 380139276 562680969 391897894 391897902 610662417 702576570 778349151 778349150 144611847 144611847 888681165 952726258 635003873 635003864 365476184 353032583 492888825 492888833 451690481 492888832 492888828 781...
output:
444384507 582048587 4116309 958927956 240831257 919504659 137935091 811573108 93791855 55056035
result:
wrong answer 7th lines differ - expected: '253033294', found: '137935091'