以某個題為例
description
給出乙個序列,包含n個數,有正數、0及負數。
現取連續的一段數,問它們和的絕對值的最小、最大值分別為多少?
input
第一行乙個數n,表示序列長度。(1<=n<=1e5)
第二行包含n個整數,a[1],a[2]…a[n]。(-1e7<=a[i]<=1e7)
output
一行包含兩個數 最小值、最大值。
sample input 1
4-1 0 2 1
sample output 1
0 3hint
取[0]時,得到最小值0;取[2,1]時,得到最大值3。
總共四個程式
每個程式分別在乙個檔案裡,生成的所有資料都是放在對拍程式裡。a.in,a.out, ans.out。因為程式是從對拍程式處執行的,所以其實在執行其它三個程式的時候他們的路徑是對拍程式的路徑,所以用相對路徑就可以了。
system(「c:\a.exe」)執行a.exe可執行檔案,路徑一定要正確啊.
system(「fc a.in」 ans.in)比較這兩個檔案內容是否一直,相同返回0,不同返回非0.同樣需要指明這兩個檔案的路徑。
一 正確程式(確保答案是正確的道)
#include
using namespace std;
#define ll long long
const
int n =
100*
1000+10
;ll n, a[n]
;int
main()
);ll mi =
1e15
;for
(int i =
1; i <= n; i++
)mi =
min(mi,
abs(a[i]
- a[i -1]
)); cout << mi <<
" "<<
abs(a[0]
- a[n]
)<< endl;
return0;
}
二 測試程式(需要測試的程式)
#include
using namespace std;
typedef
long
long ll;
const ll maxn =
1e5+5;
ll n, a[maxn]
, x;
intmain()
sort
(a, a + n +1)
; ll mx =
1e15+5
;for
(ll i =
1; i <= n; i++
)printf
("%lld %lld\n"
, mx, a[n]
- a[0]
);return0;
}
三 資料生成程式(根據題目生成相應的程式)
#include
using namespace std;
#define ll long long
ll random
(int n)
void
creat()
}int
main()
四 對拍程式(比較測試程式與正確程式生成的答案是否相同)
#include
using namespace std;
intmain()
return0;
}
可以將每個測試資料儲存下來。
在sureanswer中開啟檔案,再執行exe檔案之後讀寫會出錯,必須在exe中開啟檔案,通過向main函式中傳入引數就可以開啟指定的檔案了。引數的下標從1開始。
為了保證隨機數的隨性,在每次執行createdata時,先先睡眠1秒,再用當前時間初始化隨機數種子。
程式主要修改了 sureaanswer,向其它exe參入的引數,第乙個是讀檔案,第二個是寫檔案。
#include
using namespace std;
intmain()
else
printf
("accept,測試點 #%d,用時 %.0lfms\n"
,i,ed-st);}
return0;
}
對拍程式c
對拍就是你給兩個程式和乙個隨機資料生成器,然後系統用隨機資料生成器的輸出資料作為你這兩個程式的輸入,比較這兩個程式的輸出,找到這兩個程式輸出不一樣的一組資料。data.exe是資料生成程式 test.exe是你需要檢查的程式 ac.exe是正確的程式 這三個程式需要放在同一目錄下,執行以下對拍程式即...
Release 對程式的優化 C
c 程式執行有debug模式和release模式 一般用於程式除錯,對 不會有任何的優化,還會加入很多檢測的節點,執行效率很低,速度慢 用於程式發布版本的執行方式,會對程式進行深度 徹底的優化,執行效率高,速度快 變數 定義的變數,比如 int a 1 不管中間進行多麼複雜的運算 變化,只要最後沒有...
C 程式設計師對c 說的話
1 在 c 中幾乎不需要用巨集,用 const 或 enum 定義明顯的常量,用 inline 避免函式 呼叫的額外開銷,用模板去刻畫一族函式或型別,用 namespace 去避免命名衝突。2 不要在你需要變數之前去宣告,以保證你能立即對它進行初始化。3 不要用 malloc,new 運算會做的更好...