QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#657906 | #8237. Sugar Sweet II | shinonomezhou | TL | 0ms | 19384kb | C++23 | 1.2kb | 2024-10-19 15:42:17 | 2024-10-19 15:42:17 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7,N=5e5+2e2;
ll a[N],b[N],w[N],ans[N],way[N],fact[N];
ll ksm(ll a,ll b){
ll sz=a;
ll ans=1;
while(b){
if(b&1)ans=ans*sz%mod;
sz=sz*sz%mod;
b>>=1;
}
return (ans+mod)%mod;
}
void solve(int i){
if(b[i]==i){
ans[i]=a[i];
way[i]=1;
return;
}
if(a[i]<a[b[i]]){
ans[i]=a[i]+w[i];
way[i]=1;
return ;
}
else if(a[i]>=a[b[i]]+w[b[i]]){
ans[i]=a[i];
way[i]=1;
return ;
}
else{
if(way[b[i]]==-1){
solve(b[i]);
}
ll temp=ksm(fact[way[ b[i] ]+ 1 ],mod-2);
ans[i]=((a[i]+w[i])*temp%mod+a[i]*(fact[way[ b[i] ]+ 1 ]-1+mod)*temp%mod+mod)%mod;
way[i]=way[b[i]]+1;
return;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
fact[0]=1;
for(ll i=1;i<=5e5;i++){
fact[i]=fact[i-1]*i%mod;
}
int T;
cin>>T;
while(T--){
memset(way,-1,sizeof way);
ll n;
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)cin>>b[i];
for(int i=1;i<=n;i++)cin>>w[i];
for(int i=1;i<=n;i++){
// cout<<"y\n";
if(way[i]==-1)solve(i);
cout<<ans[i]<<' ';
}
cout<<"\n";
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 19384kb
input:
4 4 2 5 5 2 4 2 1 3 3 2 1 4 3 5 4 3 1 1 1 6 6 6 3 5 4 3 2 3 1 1 2 3 5 2 1 3 2 1 5 1 1 3 4 1 3 4 2 4
output:
500000007 5 5 6 5 10 9 166666673 5 6 500000006 4 3 4 5
result:
ok 15 numbers
Test #2:
score: -100
Time Limit Exceeded
input:
50000 5 508432375 168140163 892620793 578579275 251380640 3 4 4 1 3 346232959 736203130 186940774 655629320 607743104 1 863886789 1 364158084 18 864679185 463975750 558804051 604216585 694033700 499417132 375390750 337590759 467353355 111206671 983760005 984444619 322277587 138763925 205122047 97736...
output:
854665334 904343293 462121091 905350506 859123744 863886789 871186919 814243920 968784984 1206455481 855293146 1449261420 527309234 901433117 519383814 907574792 983760005 984444619 489899014 435736558 1113628633 977360756 361646128 963066959 677431680 575333297 122924733 421298438 601054667 1099...