很不理解这道题为什么超时。
原代码:
#include<iostream>
#include<math.h>
#include<string>
#include <iomanip>
#include<stdio.h>
using namespace std;
int main()
{
int n;
cin >> n;
int *d = new int[n+1];
d[0] = 0;
int s = 0;
for (int i = 1; i <=n; i++) {
cin >> d[i];
s += d[i];
d[i] = s;
}
int m;
cin >> m;
int x, y;
for (int i = 1; i <=m; i++) {
cin >> x >> y;
int sum = 0;
int sum2 = 0;
if (x > y) {
int tmp = x;
x = y;
y = tmp;
}
sum = d[y-1] - d[x-1];
sum2 = s - sum;
if (sum > sum2)sum = sum2;
cout << sum << endl;
}
return 0;
}
就是超时,然后把for循环换成while,ac了。
#include<iostream>
#include<math.h>
#include<string>
#include <iomanip>
#include<stdio.h>
using namespace std;
int main()
{
long n;
cin >> n;
long *d = new long[n+1];
d[0] = 0;
long s = 0;
for (long i = 1; i <=n; i++) {
cin >> d[i];
s += d[i];
d[i] = s;
}
long m;
cin >> m;
long x, y;
while(m--) {//这里
cin >> x >> y;
long sum = 0;
long sum2 = 0;
if (x > y) {
long tmp = x;
x = y;
y = tmp;
}
sum = d[y-1] - d[x-1];
sum2 = s - sum;
if (sum > sum2)sum = sum2;
cout << sum << endl;
}
system("pause");
return 0;
}
还有就是,一开始没想到可以直接叠加距离,这样就不用再用一个For循环算x到y的距离了。