f006 - Error
題目描述
題目要求讀取一系列整數,並輸出其中最大和最小的數。由於 ZeroJudge 網站回傳 500 Server Error,無法得知題目完整描述,但從提供的 AC 程式碼可以推斷出題目意圖。
解題思路
程式碼使用迴圈讀取整數,並使用 max 和 min 變數追蹤目前遇到的最大和最小數。初始時,max 設定為 0,min 設定為 10000。迴圈中,如果讀取的數 n 大於 max,則更新 max;如果 n 小於 min,則更新 min。迴圈結束後,輸出 max 和 min,中間用空格分隔。程式碼使用了快速輸入輸出優化,例如 getchar_unlocked() 和 putchar_unlocked(),以及編譯器優化標誌。
複雜度分析
- 時間複雜度: 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 <iostream>
inline int read(){
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[5],*ptr(&stk[0]);
while(x){*ptr=x%10;x/=10;++ptr;}
while(--ptr>=(&stk[0])){putchar_unlocked(*ptr+'0');}
}
using namespace std;
int main(){
int a=read(),n,max(0),min(10000);
while(a--){
n=read();
n>max&&(max=n);
n<min&&(min=n);
}
write(max);
putchar_unlocked(32);
write(min);
}