# IO Optimization# Input/Output# Basic

e295 - 基本題-小崴的IO優化挑戰

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取多組輸入,每組包含兩個無符號整數 ab,計算它們的和 c = a + b,並輸出 c。輸入以 EOF (End-of-File) 結束。

解題思路

此題主要考察輸入輸出的效率。標準的 cincout 在處理大量輸入時可能會導致 TLE (Time Limit Exceeded)。因此,需要使用更快的輸入輸出方式。程式碼中使用了 getchar_unlockedputchar_unlocked 函數,它們直接與標準輸入輸出流交互,避免了緩衝區的影響,從而提高了輸入輸出的速度。此外,程式碼還使用了自定義的 readintwrite 函數,它們通過逐字符讀取和寫入的方式,進一步優化了輸入輸出效率。

複雜度分析

  • 時間複雜度: O(n),其中 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>
//#define getchar_unlocked getchar
//#define putchar_unlocked putchar
inline int readint(){
	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[9],*ptr(&stk[0]);
	while(x){*ptr=x%10;x/=10;++ptr;}
	while(--ptr>=(&stk[0])){putchar_unlocked(*ptr+'0');}
	putchar_unlocked(10);
}
int main(){
	while(int a=readint())
		write(a+readint());
}

Discussion