QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#799551 | #240. Period Sequence | cwfxlh | 100 ✓ | 414ms | 3688kb | C++14 | 1.5kb | 2024-12-05 15:45:09 | 2024-12-05 15:45:11 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
#define MOD 1000000007
using namespace std;
int T,n,l,r,s[5003],ans,lft,rgt;
int getmod(int X,int Y){return ((X%Y)+Y)%Y;}
void add(int &x,int y){x=(x+y)%MOD;return;}
int getsum(int X){
X%=MOD;
return (X*(X+1)/2)%MOD;
}
int getsum2(int X){
X%=MOD;
return (X*(X+1)%MOD)*((2*X+1)*166666668ll%MOD)%MOD;
}
int getsum3(int X){
X%=MOD;
return (X*(X+1)/2%MOD)*(X*(X+1)/2%MOD)%MOD;
}
int calc(int X,int L,int R,int A,int B){
int ret=0,v0=0,v1=0,v2=0,v3=0;
X+=L;
A-=L;
B-=L;
X%=MOD;A%=MOD;B%=MOD;
v0=-(X*(A*B%MOD)%MOD);
v1=n*((B*X+A*X-A*B)%MOD)%MOD;
v2=(n*n%MOD)*(A+B-X)%MOD;
v3=-(n*n%MOD)*n%MOD;
add(ret,v0*(((R-L+n)/n)%MOD));
add(ret,v1*getsum((R-L)/n));
add(ret,v2*getsum2((R-L)/n));
add(ret,v3*getsum3((R-L)/n));
return ret;
}
void sol(){
cin>>n>>l>>r;
for(int i=0;i<n;i++){
cin>>s[i];
s[i]-=i;
}
ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j)continue;
if(getmod(s[i]-s[j],n)!=getmod(j-i,n))continue;
if(s[i]<s[j])continue;
lft=(l/n)*n+i;
rgt=(r/n)*n+j;
while(lft<l)lft+=n;
while(rgt>r)rgt-=n;
rgt-=(s[i]-s[j]);
if(lft<=rgt)ans=(ans+2*calc(s[i],lft,rgt,(l-1),(r+1)-(s[i]-s[j])))%MOD;
}
}
for(int i=0;i<n;i++){
lft=(l/n)*n+i;
rgt=(r/n)*n+i;
while(lft<l)lft+=n;
while(rgt>r)rgt-=n;
if(lft<=rgt)ans=(ans+calc(s[i],lft,rgt,l-1,r+1))%MOD;
}
ans%=MOD;
ans+=MOD;
ans%=MOD;
cout<<ans<<'\n';
return;
}
signed main(){
ios::sync_with_stdio(false);
cin>>T;
while(T--)sol();
return 0;
}
详细
Pretests
Final Tests
Test #1:
score: 100
Accepted
time: 414ms
memory: 3688kb
input:
430 6 914575 1823342 2 14 26 32 80 98 6 968417 1985938 1 59 28 25 79 60 4 153020 1466079 71 34 10 2 10 996221 1688188 22 42 59 69 92 72 52 52 82 72 6 142341 1628756 91 19 55 43 49 79 2 860345 1156551 74 40 9 276848 1604010 76 12 40 30 83 20 58 97 76 5 886718 1121954 92 57 47 32 42 10 602581 1020483 ...
output:
859394676 559509681 787220196 693198410 563990423 919827834 799518457 61584895 313931966 663921331 760107172 283514211 582538287 52316335 811913179 28918969 768328262 95583791 489827987 612318061 362003880 544647001 965717551 928791871 620709166 551257293 115499760 586947052 849302014 299179050 4607...
result:
ok 430 lines