-
部分超时
#include <iostream> #include <algorithm> using namespace std; /* 5 1 2 4 14 9 1 1 3 */ int main(int argc, char** argv) { int n, a[100001]; int m; int sum = 0, max = 0; cin >> n; for(int i = 0; i < n; i++){ sum += a[i]; } int begin, end; cin >> m; while(m--){ cin >> begin >> end; if(begin < end){ for(int i = begin - 1; i < end - 1; i++){ max += a[i]; } } else { for(int i = end - 1; i < begin - 1; i++){ max += a[i]; } } if(sum - max < max){ max = sum - max; } cout << max << endl; max = 0; } return 0; }
-
满分代码
思路:
- 设置一个dis[]数组,以及sum变量。
- dis[i]表示1号结点按顺时针方向到达“i”号结点顺时针的下一个结点,
- 一定要预处理dis[] 和 sum。
代码:
#include <iostream> #include <algorithm> using namespace std; const int MAXN = 100005; int dis[MAXN], A[MAXN]; int main(int argc, char** argv) { int sum = 0, query, n, left, right; cin >> n; for(int i = 1; i <= n; i++){ cin >> A[i]; sum += A[i]; dis[i] = sum; //预处理dis数组 dis[i]表示1号结点按顺时针方向到达"i"号结点的距离 } cin >> query; while(query--){ cin >> left >> right; if(left > right) swap(left, right); int temp = dis[right-1] - dis[left-1]; cout << min(temp, sum - temp) << end; } return 0; }
-
A1046 Shortest Distance (20 分)
猜你喜欢
转载自blog.csdn.net/alovelypeach/article/details/113785478
今日推荐
周排行