×
解除綁定,重新設定系統帳號的密碼
您的系統帳號 ID:
您的系統帳號:
您的帳號暱稱:
設定新密碼:
設定新密碼:
×
請輸入要加入的「課程代碼」
請向開設課程的使用者索取「課程代碼」
分類題庫
解題動態
排行榜
討論區
競賽區
登入
註冊
發表新討論
#8276: WHY? WA(line:75251)
kevinyin99
(kevinyin)
學校:
臺北市立麗山高級中學
編號:
34853
×
傳送站內訊息
傳給:
主題:
內容:
來源:
[140.113.121.226]
註冊時間:
2013-09-13 19:50:25
最後登入時間:
2019-05-27 22:12:08
a693.
吞食天地
| From: [1.160.248.90] | 發表日期: 2013-10-03 21:26
#include <iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int full[n];
for(int i=0;i<n;i++){
cin>>full[i];
}
while(m--){
int l,r,sum=0;
cin>>l>>r;
for(int i=l-1;i<r;i++){
sum += full[i];
}
cout<<sum<<endl;
}
return 0;
}
為啥會WA?
#8291: Re:WHY? WA(line:75251)
a450
(要学会宽容)
學校:
福建省福州第十九中学
編號:
33926
×
傳送站內訊息
傳給:
主題:
內容:
來源:
[118.189.34.85]
註冊時間:
2013-08-05 18:03:31
最後登入時間:
2016-04-05 21:29:33
a693.
吞食天地
| From: [59.56.137.10] | 發表日期: 2013-10-05 20:17
不清楚 我觉得你程式速度太慢了 加快点试试
#8487: Re:WHY? WA(line:75251)
amoshuangyc
(amoshyc)
學校:
國立臺南第一高級中學
編號:
7453
×
傳送站內訊息
傳給:
主題:
內容:
來源:
[118.160.141.75]
註冊時間:
2009-08-09 16:45:22
最後登入時間:
2025-05-26 20:23:34
a693.
吞食天地
| From: [111.255.11.102] | 發表日期: 2013-12-28 17:57
= = 這是一題多筆測資的…
應該寫成:
while (cin >> n >> m) {
for (int i=0; i<n; i++){
...
}
while (m--) {
...
}
...
}
而且你這樣寫應該會 TLE。
最近有個學弟也在問這一題,底下是我給他的回覆:
底下用實例來說明。
a[] 是一個數列。已知 前三項之和為 23,且 前五項之和為 56,求 a[4] + a[5]。
答案很明顯是 56-23 = 33。
因為:
a[1] + a[2] + a[3] = 23
a[1] + a[2] + a[3] + a[4] + a[5] = 56
第二式減第一式得:
a[4] + a[5] = 56 - 23 = 33
弄懂以上概念後,我們再來討論題目。
很明顯地,讀入數列後,每次依照給定範圍,從頭慢慢加會 TLE,那我們是不是可以適先加好?
於是就可以使用上述方法:
程式一開始讀入數列就先加總,也就是說我們建立起一個陣列, sum 陣列,其中 sum[k] = a[1] + a[2] + ... + a[k]。
那當我們要求某個區間之和時,就可以用減的,即 a[k] + a[k+1] + ... + a[m] = sum[m] - sum[k-1] 得到。
※ 這裡用 1 作為陣列的第一項,你可以自己修改成 0 ,不過因為題目是用 1 作為第一項,為防混亂,所以我在我的程式碼中也用 1 作為第一項。如果你想使用 0 作為你的陣列的第一項,那麼要記得:題目所說的第 r 項指的是你的陣列中的第 r-1 項。
#8605: Re:WHY? WA(line:75251)
yorklai0523
(Orange)
學校:
不指定學校
編號:
26468
×
傳送站內訊息
傳給:
主題:
內容:
來源:
[114.37.139.175]
註冊時間:
2012-07-28 15:42:50
最後登入時間:
2015-08-11 19:28:46
a693.
吞食天地
| From: [114.43.182.125] | 發表日期: 2014-02-03 16:25
#include
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int full[n];
for(int i=0;i
cin>>full[i];
}
while(m--){
int l,r,sum=0;
cin>>l>>r;
for(int i=l-1;i
sum += full[i];
}
cout<
}
return 0;
}
為啥會WA?
for(int i=l-1;i<r;i++){
sum += full[i];
}
你這裡l-1會多加一個
#9486: Re:WHY? WA(line:75251)
loo85213
(元元)
學校:
國立中央大學附屬中壢高級中學
編號:
40508
×
傳送站內訊息
傳給:
主題:
內容:
來源:
[125.227.53.126]
註冊時間:
2014-04-15 22:56:24
最後登入時間:
2018-07-26 16:44:23
a693.
吞食天地
| From: [140.113.138.148] | 發表日期: 2014-12-04 23:35
#include
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int full[n];
for(int i=0;i
cin>>full[i];
}
while(m--){
int l,r,sum=0;
cin>>l>>r;
for(int i=l-1;i
sum += full[i];
}
cout<
}
return 0;
}
為啥會WA?
因為資測裡包含好幾組
所以輸入n,m時要加上EOF判斷