区间权值
区间权值
https://ac.nowcoder.com/acm/problem/19798
不太会化简公式,写了个暴力,计算了一下每个wi对应的区间
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int>P;
vector<P>G[1000];
int main() {
int n;
scanf("%d",&n);
int ans=0;
for(int l=1; l<=n; ++l) {
for(int r=l; r<=n; ++r) {
G[r-l+1].push_back(P(l,r));
}
}
for(int i=1; i<=n; ++i) {
for(int j=0; j<G[i].size(); ++j) {
printf("%d %d\n",G[i][j].first,G[i][j].second);
}
printf("------>\n");
}
return 0;
}然后得出规律求解即可:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
const int N=3e5+500;
ll a[N],b[N],sum[N];
int main() {
int n;
scanf("%d",&n);
for(int i=1; i<=n; ++i) {
scanf("%lld",&a[i]);
sum[i]=(sum[i-1]+a[i])%mod;
}
for(int i=1; i<=n; ++i) {
scanf("%lld",&b[i]);
}
ll ans=0,cut=0;
for(int i=1; i<=n; ++i) {
cut=(cut+(sum[n-i+1]-sum[i-1]+mod)%mod)%mod;
ans=(ans+cut*b[i]%mod)%mod;
}
printf("%lld\n",ans);
return 0;
}
vivo公司福利 698人发布
查看8道真题和解析