三年目の初学者(9問目)
問題
AtCoder Beginner Contest 092 C - Traveling Plan
C: Traveling Plan - AtCoder Beginner Contest 092 | AtCoder
使用言語
C++
方針
・本来の値段をまず求めて、そこから値段を増減させる。
・計算量的にもこれがベスト
所感
・すぐに解きたい問題だったが、時間かかった
・添字大事。
コード
#include <iostream> #include <string> #include <algorithm> using namespace std; #define FOR(i,a,b) for(int i=a;i<b;i++) #define REP(i,b) FOR(i,0,b) #define INF 1e9 int solve(int a[], int all_payment, int i) { int ans = all_payment; ans += max(a[i-1], a[i+1]) - min(a[i-1], a[i+1]); ans -= max(a[i-1], a[i]) - min(a[i-1], a[i]); ans -= max(a[i], a[i+1]) - min(a[i], a[i+1]); return ans; } int main() { int n, tmp, all_payment = 0; cin>>n; int a[n+2]; a[0] = 0; a[n+1] = 0; FOR(i,1,n+1) { cin>>a[i]; } REP(i,n+1) all_payment += max(a[i], a[i+1]) - min(a[i], a[i+1]); FOR(i,1,n+1) { cout<<solve(a, all_payment, i)<<endl; } return 0; }