題目描述
給定乙個長度為 nnn 的數列 a1,a2,a3,…,ana_1,a_2,a_3,\dots,a_na1,a2,a3,…,an。輸入格式現在你要求出乙個長度為 nnn 的數列
b1,b2,b3,…,bnb_1,b_2,b_3,\dots,b_nb1,b2,b3,…,bn,滿足
bk=∑i∣kaib_k=\sum_a_i bk=i∣k∑ai
由於某些神秘原因,這裡的 bkb_kbk 要對 2322^232 取模。
為了避免過大的輸入,本題的輸入使用隨機數生成器。輸入中只有一行兩個整數 n,seedn,seedn,seed。其中 seedseedseed 為 323232 位無符號整數,用來生成資料。接下來,你要呼叫 nnn 次隨機數生成器,分別生成 a1∼ana_1\sim a_na1∼an。對於c/c++選手,生成器模板如下:
#define uint unsigned int
uint seed;
inline uint getnext()
注意:所有 nnn 個數均為 323232 位無符號整數。
輸出格式
為了避免過大的輸出,你只需輸出乙個 323232 位無符號整數,表示所有 bib_ibi 的異或和。
輸入
5 1477輸出 題解
#include
#define uint unsigned int
using
namespace std;
uint seed;
inline uint getnext()
uint num[
30000000
],t[
30000000
],prim[
30000000
],pri[
30000000
],cnt,ans;
intmain()
}for
(uint i=
1;i<=n;i++
) cout<}
其中,inline用於宣告內聯函式,內聯函式作用可以省去函式呼叫的開銷,編譯器會將內聯函式複製展開。
- inline定義與性質
定義
當函式被宣告為內聯函式之後,編譯器會將其內聯展開,而不是按通常函式呼叫。
性質
只有當函式只有10行甚至更少時才將其定義為內聯函式內聯以**膨脹(拷貝)為代價,僅僅省去了函式呼叫的開銷。
函式呼叫開銷:引數壓棧、跳轉、退棧和返回等操作,不包括執行函式體的開銷
關鍵字 inline 必須與函式定義體放在一起才能使函式成為內聯,僅將 inline 放在函式宣告前面不起任何作用。
// 如下風格的函式 foo 不能成為內聯函式:
inline
void
foo(
int x,
int y)
;// inline 僅與函式宣告放在一起
void
foo(
int x,
int y)
// 而如下風格的函式 foo 則成為內聯函式:
void
foo(
int x,
int y)
;inline
void
foo(
int x,
int y)
// inline 與函式定義體放在一起
詳細inline inline 內聯函式
一 inline關鍵字用來定義乙個類的內聯函式,引入它的主要原因是用它替代c中表示式形式的巨集定義。表示式形式的巨集定義一例 define expressionname var1,var2 var1 var2 var1 var2 為什麼要取代這種形式呢,且聽我道來 1 首先談一下在c中使用這種形式巨...
inline內聯函式
技術類筆試題50 都會問巨集與inline的區別,自己去找找看?1 巨集替換發生在預編譯 2 巨集函式 如果可以這麼叫的話 替換時不會檢查引數,inline函式會檢查 3 巨集一定會發生替換,inline貌似不是強制的,編譯器想不替換也沒關係 4 巨集替換時存在著一些不可避免的陷阱 參見c trap...
inline內聯函式
一 內聯函式 內聯函式是指用inline關鍵字修飾的函式 它與普通函式所不同之處只在於函式呼叫的處理。普通 函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中 內聯函式不是在呼叫時發生執行權轉移,而是在編譯時將 函式 體 嵌入在每乙個呼叫處。編譯時類似巨集替換,使用 函式體替...