評分結果(參考) : AC (0.2s, 34.7MB)
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t-- > 0){
int n, k;
cin >> n >> k;
vector<int> a(n), w(n);
vector<int> sum(n, 0);
for(int& i : a) cin >> i;
for(int& i : w) cin >> i;
sum[n-1] = w[n-1];
for(int i=n-2; i>=0; i--){
sum[i] = sum[i+1] + w[i];
}
int ans = 0;
int l=0, r=0;
for(; l<n; l++){
while(r<n && a[r]<=a[l]+k) r++;
if(r >= n) break;
ans += w[l]*sum[r];
}
cout << ans << "\n";
}
return 0;
}
評分結果(參考) : AC (39ms, 34.6MB)
#include<bits/stdc++.h>
#define int long long
using namespace std;
int readInt(){
int res = 0;
char c = getchar_unlocked();
while(c < '0') c = getchar_unlocked();
while(c >= '0'){
res = 10*res + (c-'0');
c = getchar_unlocked();
}
return res;
}
signed main(){
int t;
t = readInt();
while(t-- > 0){
int n = readInt();
int k = readInt();
vector<int> a(n), w(n);
vector<int> sum(n, 0);
for(int& i : a) i = readInt();
for(int& i : w) i = readInt();
sum[n-1] = w[n-1];
for(int i=n-2; i>=0; i--){
sum[i] = sum[i+1] + w[i];
}
int ans = 0;
int l=0, r=0;
for(int l=0; l<n; l++){
while(r<n && a[r]<=a[l]+k) r++;
if(r >= n) break;
ans += w[l]*sum[r];
}
printf("%lld\n", ans);
}
return 0;
}
評分結果(參考) : AC (35ms, 36.6MB)
#include<bits/stdc++.h>
#define int long long
using namespace std;
static const int BUFSIZE = 1<<21;
char buf[BUFSIZE];
int idx = 0, len = 0;
inline char getch(){
if(idx >= len){
len = fread(buf, 1, BUFSIZE, stdin);
idx = 0;
if(len == 0) return 0;
}
return buf[idx++];
}
inline int readInt(){
int num = 0;
char c = getch();
while(c < '0') c = getch();
while(c >= '0'){
num = num*10 + (c-'0');
c = getch();
}
return num;
}
signed main(){
int t;
t = readInt();
while(t-- > 0){
int n = readInt();
int k = readInt();
vector<int> a(n), w(n);
vector<int> sum(n, 0);
for(int& i : a) i = readInt();
for(int& i : w) i = readInt();
sum[n-1] = w[n-1];
for(int i=n-2; i>=0; i--){
sum[i] = sum[i+1] + w[i];
}
int ans = 0;
int l=0, r=0;
for(int l=0; l<n; l++){
while(r<n && a[r]<=a[l]+k) r++;
if(r >= n) break;
ans += w[l]*sum[r];
}
printf("%lld\n", ans);
}
return 0;
}