問題やアイデアの意味
問題の意味:Nノード(N 1)があり、これらの点の数エン所定数番目までの最短距離を見つける環を形成し、> 2すなわち1- ... - > N - > 1。
アイデア:最初のステップは、前処理操作 DISに[i]が表す:リングの合計距離を記録しながら、次のノードへのノードから第1号は、I(次の位置時計回り)によって指されます。2点間の最短距離は、利用可能な式によって、算出して要求が与えられる第二のステップDIS [EN - 1] - DIS [ST - 1] 。Tの最終値、およびフロント得られた和を取る- Tの小さい値に。(式はここでは非常に厳しい、思考のスケッチを添付、考える必要があります)
注意ポイント:ST>エン場合は最初のポイント、STは、EN、スイッチ、サイズに注意してください。この質問は、単純なシミュレーションですが、与えられた制限時間内に完了することができない、暴力行為の配列O(n)の複雑さを横断するために使用する場合は、指定範囲は、かなり大きいです、そうものの第二に、この質問は、事前にその決定的な処理操作。
アタッチ思考スケッチを :(右の赤い部分は一例です)
コード
#include <iostream> #include <algorithm> using namespace std; const int MAX = 100005; int dis[MAX],arr[MAX]; int main(){ int n; cin >> n; int sum = 0; for(int i=1;i<=n;i++) { cin >> arr[i]; sum += arr[i]; dis[i] = sum; //key code } int m,st,en; cin >> m; while(m--){ cin >> st >> en; if(st>en) swap(st,en); int t = dis[en-1] - dis[st-1]; cout << min(t,sum-t) << endl; } return 0; }