e273 - 微分入門課
題目描述
題目要求計算多項式函數 f(x) 的導數。輸入包含多組測試案例,每組案例首先給定多項式的項數 n,然後給定 n 個整數,表示多項式的係數,按照降冪排列。輸出導數的係數,同樣按照降冪排列。
解題思路
題目要求計算多項式的導數,其核心思想是將每一項的係數乘以項的次數,然後將次數減 1。由於輸入的係數是按照降冪排列的,因此導數的係數也應該按照降冪排列輸出。
程式碼中,read() 函數用於快速讀取整數,write() 函數用於快速輸出整數。主函數中,首先讀取項數 n,然後迴圈讀取每個係數,並計算導數的係數。由於導數的常數項為 0,因此不需要輸出。
程式碼使用了 getchar_unlocked() 和 putchar_unlocked() 來優化輸入輸出,避免了緩衝區的影響,提高了程式的執行效率。
複雜度分析
- 時間複雜度: O(n)
- 空間複雜度: O(1)
程式碼
#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include <stdio.h>
inline int read(){
int a(0);
char c('0');
while(c>='0'){
a=(a<<3)+(a<<1)+c-'0';
c=getchar_unlocked();
}
return a;
}
inline void write(int x) {
int stk[5],*ptr(&stk[0]);
while(x){*ptr=x%10;x/=10;++ptr;}
while(--ptr>=(&stk[0])){putchar_unlocked(*ptr+'0');}
putchar_unlocked(32);
}
int main(){
int a(read());
do{
if(!(--a))
putchar_unlocked(48);
else
for(;a;--a)
write(read()*a);
putchar_unlocked(10);
read();
}while(a=read());
}