fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int N;
  5.  
  6. int getSangduckStart(int start, int end){
  7. if(start>1) return 1;
  8. else return end + 1;
  9. }
  10.  
  11. int getSanduckEnd(int start, int end){
  12. if(end==N) return start-1;
  13. else return N;
  14. }
  15.  
  16. int main() {
  17. ios::sync_with_stdio(0);
  18. cin.tie(0);
  19. cout.tie(0);
  20.  
  21. long long answer = 2'000'000'000;
  22.  
  23. long long unsignedDiff[2001] = {0, };
  24. long long unsignedDiffCache[2001] = {0, };
  25.  
  26. long long signedDiff[2001] = {0, };
  27. long long signedDiffCache[2001] = {0, };
  28.  
  29. long long numbers[2001] = {0, };
  30.  
  31. cin>>N;
  32. cin>>numbers[1];
  33. for(int i=2;i<=N;i++){
  34. cin>>numbers[i];
  35. signedDiff[i] = numbers[i] - numbers[i-1];
  36. signedDiffCache[i] = signedDiff[i] + signedDiffCache[i-1];
  37. unsignedDiff[i] = abs(signedDiff[i]);
  38. unsignedDiffCache[i] = unsignedDiff[i] + unsignedDiffCache[i-1];
  39. }
  40.  
  41. // for(int i=1;i<=N;i++) cout<<unsignedDiff[i]<<" ";
  42. // cout<<'\n';
  43. // for(int i=1;i<=N;i++) cout<<unsignedDiffCache[i]<<" ";
  44. // cout<<'\n';
  45.  
  46. for(int endOfHeewon=1;endOfHeewon<=N;endOfHeewon++){
  47. for(int startOfHeewon=1;startOfHeewon<=endOfHeewon;startOfHeewon++){
  48. long long sumOfHeewon = unsignedDiffCache[endOfHeewon] - unsignedDiffCache[startOfHeewon];
  49.  
  50. int startOfSangduck = getSangduckStart(startOfHeewon, endOfHeewon);
  51. int endOfSangduck = getSanduckEnd(startOfHeewon, endOfHeewon);
  52. long long sumOfSangduck = 0;
  53. if(endOfHeewon==N){
  54. sumOfSangduck = unsignedDiffCache[endOfSangduck] - unsignedDiffCache[startOfSangduck];
  55. }else{
  56. sumOfSangduck = unsignedDiffCache[N]
  57. - sumOfHeewon
  58. - unsignedDiff[startOfHeewon]
  59. - unsignedDiff[endOfHeewon+1];
  60.  
  61. if(startOfHeewon>1){
  62. sumOfSangduck += unsignedDiffCache[startOfHeewon-1]
  63. + numbers[endOfHeewon+1] - numbers[startOfHeewon-1];
  64. }
  65. }
  66.  
  67. cout<<"희원 "<<startOfHeewon<<" "<<endOfHeewon<<" "<<sumOfHeewon<<'\n';
  68. cout<<"상덕"<<startOfSangduck<<" "<<endOfSangduck<<" "<<sumOfSangduck<<'\n';
  69. answer = min(answer, (long long)sumOfSangduck + sumOfHeewon);
  70. }
  71. }
  72. cout<<answer<<'\n';
  73.  
  74. // your code goes here
  75. return 0;
  76. }
Success #stdin #stdout 0s 5308KB
stdin
5
3 6 2 5 4
stdout
희원 1 1 0
상덕2 5 8
희원 1 2 3
상덕3 5 4
희원 2 2 0
상덕1 5 3
희원 1 3 7
상덕4 5 1
희원 2 3 4
상덕1 5 3
희원 3 3 0
상덕1 5 6
희원 1 4 10
상덕5 5 0
희원 2 4 7
상덕1 5 1
희원 3 4 3
상덕1 5 4
희원 4 4 0
상덕1 5 16
희원 1 5 11
상덕6 0 0
희원 2 5 8
상덕1 1 0
희원 3 5 4
상덕1 2 3
희원 4 5 1
상덕1 3 7
희원 5 5 0
상덕1 4 10
3