#55326: 解題報告


yp11451267@yphs.tp.edu.tw (705-43鄭丞博)


#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

void solve() {
    long long x;
    // 讀取每筆測資的第一行:x 的值
    while (cin >> x) {
        string line;
        cin.ignore(); // 忽視掉 x 後面的換行符號
        getline(cin, line); // 讀取整行的係數
        
        stringstream ss(line);
        long long coef;
        vector<long long> a;
        
        // 快速解析整行整數
        while (ss >> coef) {
            a.push_back(coef);
        }
        
        // 如果只有一項(常數項),微商後必定為 0
        if (a.size() <= 1) {
            cout << 0 << "\n";
            continue;
        }
        
        long long derivative_ans = 0; // 記錄 f'(x) 的答案
        long long current_f = 0;      // 記錄原多項式除去常數項後的前綴計算值
        
        int n = a.size() - 1; // 最高次方
        
        // 運用 Horner's Method 變體,由最高次項 a[0] 一路算到 a[n-1]
        // 注意:最後一項 a[n] 是常數項,微分後為 0,所以迴圈不需要跑到最後一項
        for (int i = 0; i < n; ++i) {
            current_f = current_f * x + a[i];
            
            // 如果還沒到最後一項微分的貢獻,就繼續將現有的導數結果乘以 x
            if (i < n - 1) {
                derivative_ans = derivative_ans * x + current_f;
            } else {
                // 最後一步不需要再乘以 x
                derivative_ans = derivative_ans * x + current_f;
            }
        }
        
        cout << derivative_ans << "\n";
    }
}

int main() {
    // 極速輸入輸出優化,防範大量測資帶來的 I/O 延遲
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    solve();
    
    return 0;
}