日期:2025年9月14日
ZeroJudge 題目連結:d881. 作業苦多
解題想法
這題可以寫迴圈直接跑,也可以先推導數學公式之後再代公式求解。
Python 程式碼
使用時間約為 17 ms,記憶體約為 3.3 MB,通過測試。
import sys
for line in sys.stdin:
d = int(line) # 公差的增量
dp = [0]*51 # 儲存第 0 ~ 50 項的串列
dp[1] = 1 # 第 1 項為 1
b = 1 # 公差,預設為 1
isum = 1 # 加總,先加第 1 項
for i in range(2, 51): # 計算第 2 到 50 項
dp[i] = dp[i-1] + b # 第 i 項為第 i-1 項加上 b
isum += dp[i] # 更新 isum
b += d # 更新 b
print(isum) # 印出 isum
只要用到前一項,使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
import sys
for line in sys.stdin:
d = int(line) # 公差的增量
last = 1 # 第 1 項為 1
b = 1 # 公差,預設為 1
isum = 1 # 加總,先加第 1 項
for i in range(2, 51): # 計算第 2 到 50 項
last += b # 第 i 項為第 i-1 項加上 b
isum += last # 更新 isum
b += d # 更新 b
print(isum) # 印出 isum
直接代公式,使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
import sys
for line in sys.stdin:
print(1275 + int(line)*19600)
C++ 程式碼
使用時間約為 2 ms,記憶體約為 64 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int d; // 公差的增量
while(scanf("%d", &d) != EOF) {
int dp[51] = {0}; // 儲存第 0 ~ 50 項的串列
dp[1] = 1; // 第 1 項為 1
int b = 1, isum = 1; // 公差,預設為 1;加總,先加第 1 項
for(int i=2; i<=50; i++) { // 計算第 2 到 50 項
dp[i] = dp[i-1] + b; // 第 i 項為第 i-1 項加上 b
isum += dp[i]; // 更新 isum
b += d; // 更新 b
}
printf("%d\n", isum); // 印出 isum
}
return 0;
}
只要用到前一項,使用時間約為 1 ms,記憶體約為 76 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int d; // 公差的增量
while(scanf("%d", &d) != EOF) {
int last = 1, b = 1, isum = 1;; // 第 1 項為 1;公差,預設為 1;加總,先加第 1 項
for(int i=2; i<=50; i++) { // 計算第 2 到 50 項
last += b; // 第 i 項為第 i-1 項加上 b
isum += last; // 更新 isum
b += d; // 更新 b
}
printf("%d\n", isum); // 印出 isum
}
return 0;
}
直接代公式,使用時間約為 1 ms,記憶體約為 68 kB,通過測試。
#include <cstdio>
using namespace std;
int main() {
int d; // 公差的增量
while(scanf("%d", &d) != EOF) printf("%d\n", 1275 + d*19600);
return 0;
}
沒有留言:
張貼留言