抽屜原理 快速讀入

2021-10-04 21:42:43 字數 1963 閱讀 1860

十個蘋果放進九個抽屜,一定存在乙個抽屜中放著至少兩個蘋果的情況。

給定乙個長度為n的整數數列,你需要判斷是否能找到乙個長度為(int)sqrt(n-1)的非降序列或者乙個長度為(int)sqrt(n-1)的非增序列。

形式上表示,輸出答案yes當且僅當你可以找到乙個子串行a:他的長度為(int)sqrt(n-1)並且對於每個i,(2≤i≤n),ai≤ai-1 或者你可以找到乙個子串行a:他的長度為(int)sqrt(n-1)並且對於每個i,(2≤i≤n),ai-1≤ai。(建議使用快速讀入)

第一行包含乙個數t (1≤t≤10)——表示t組樣例,

然後對於每組樣例,第一行給出乙個數n(1≤n≤1e7),表示陣列長度。 然後接下來的一行,包含n個整數a1,a2,a3,……an (1≤i≤n 1≤ai<=1e18) ai表示第i個數。資料保證∑n≤4e7。

如果能找到就輸出yes,否則輸出no。

input

21 1

1 3output

yesyes

根據抽屜原理,可以發現,一定可以找到滿足題意的子串行。(題目中沒有說明子串行的連續性,則預設可連續可不連續,即任一情況滿足就輸出yes,做題的時候自己預設了必須連續,愣是沒做出來。。。)

#includeinline int read() 

ch = getchar();

}while (ch >= '0' && ch <= '9')

return num * flag;

}int main()

printf("yes");

if (t != 0) printf("\n");

}return 0;

}

快速讀入,顧名思義,很快地讀入資料。

以前做題的時候見到別人這麼寫,還不知道這是個啥。

inline int read() 

ch = getchar();

}while (ch >= '0' && ch <= '9')

return num * flag;

}

num的賦值可以用位運算num = (num << 1) + (num << 3) + ch - '0'

原理很簡單,getchar()速度比scanfcin要快。

對應快讀,自然有快寫

inline void write(int x) 

while (cnt > 0) putchar(f[- -cnt]);

//這裡 --連起來回和markdown語法衝突了,中間用了個空格

}

不開陣列的方法

inline void write(int x) 

while (len--)

}

cin < cin(關閉同步) < scanf() < read() < fread();

輸出同。

有另一種快速讀入的方法(依然比read()慢), 但是用了之後就不能使用printfscanf了。

ios::sync_with_stdio(false);

int a;

cin >> a;

需要知道,這並不是最快的,更快的還有fread(),還有比它還快的······

#define online_judge

#ifdef online_judge

char buf[1 << 21], *p1 = buf, *p2 = buf;

inline int getc()

#define getchar getc

#endif

template inline t read()

快速讀入詳解

當你在資訊學競賽 oi 中進入了提高組時,你可能會被卡常!程式被卡常數,一般指程式雖然漸進複雜度可以接受,但是由於實現 演算法本身的時間常數因子較大,使得無法在oi icpc等演算法競賽規定的時限內執行結束。常數被稱為計算機演算法競賽之中最神奇的一類數字,主要特點集中於令人捉摸不透,有時候會讓水平很...

極 快速讀入

14.8 kb 的快讀 以後拉板子方便啦!從 這裡 賀過來的 起源是 here 用 mivik 的 壓行機 壓縮 變數名再壓就看不下去了,放 include include include include include include include need to include平凡版本 fro...

快速讀入的技巧

在oj上練習題目時,有些題目資料的輸入非常大,即便是使用scanf 也會被卡常數,最後導致tle。因此蒐集網上的解決方案,常見的有以下兩種 一 當資料量不是特別大的時間,此時可以關閉stdio的同步,使得cin,cout與printf,scanf一樣快。核心 ios sync with stdio ...