三個已排序數列,找出至少出現在兩個數列中的數。數據量大(~15萬),需用 fread/fwrite 批量 IO 避免超時。
i,j,k 分別遍歷三數組t = min(A[i],B[j],C[k])t 在三數組中出現次數 cc >= 2 則加入結果t 的前進int DiscrepanciesintheVotersList() {
int N1,N2,N3; scanf("%d%d%d\n",&N1,&N2,&N3);
int *A=new int[N1], *B=new int[N2], *C=new int[N3];
char buf[10000]; int n,num=0,id=0,i=0,j=0,k=0;
while ((n=fread(buf,1,10000,stdin))>0) {
for (int x=0;x1) D[id++]=t;
}
// fwrite 分塊輸出
printf("%d\n",id);
for (i=0;i
關鍵技巧
fread 讀大塊,手工解析整數,避免格式化掃描開銷
- 緩衝區邊界處理:跨塊數字、最後無換行數字
fwrite 分塊輸出,reverse 將數字轉字符串
- 輸入邏輯與業務邏輯分離,降低複雜度
CodeChef 大數據題 IO 優化模板,值得收藏。