時々こういうの見る気がする。とりあえず求めたい値を と置いてみる感じ。
問題概要
を奇数とする。整数 が与えられるので
- ...
を満たすような を求めよ。
制約
- は奇数
考えたこと
問題の構造として
「 を決めると、残りが芋づる式にすべて決まってしまう」
というのがある。例えば
に対して とすると
- (6 - 0 = 6、16 - 6 = 10、14 - 10 = 4、10 - 4 = 6)
と決まるのだけど、最後 とはなっていないので辻褄が合わない。これが辻褄が合うような を見つけたい。 とすると
という風になる。
を解いて になる。なお とおいたときの の式は、 が奇数だと、「 としたときの の値」に を足したものになる。
#include <iostream> #include <vector> using namespace std; int main() { int N; cin >> N; vector<long long> A(N); for (int i = 0; i < N; ++i) cin >> A[i], A[i] *= 2; // x0 = 0 のとき long long offset = 0; for (int i = 0; i < N; ++i) offset = A[i] - offset; long long x = offset / 2; // 復元 long long cur = x; for (int i = 0; i < N; ++i) { cout << cur << " "; cur = A[i] - cur; } cout << endl; }