模擬賽總結 迷之long long

2021-08-03 21:13:37 字數 1763 閱讀 3743

1 棋盤

看上去很簡單對不對?直接記錄有哪些行和列已經會被攻擊,然後計算一下剩下的就好了(怎麼算?這麼簡單自己想= =)。

2 圖

是不是跟 noip 資訊傳遞特別像?直接」dfs「一下就好了,然後考慮用倍增計算走過的最小值。。。

不好意思,這麼做會超時。既然都想到了倍增,為什麼不直接倍增呢?由於題目中給定的圖具有可以不停走的性質,因此我們可以強行倍增,讓走的次數達到k次就好了。

不對吧。。。坑死人的模擬題就這麼短的題解?連參考**都沒有乙個?

因為今天我要談的,是有關資料的問題。

1 棋盤

對於 100% 的資料,n≤

105,那算到最後,是不是int裝不下?於是我就這麼定義了一下:

typedef

long

long int;

int n, m; //輸入在int範圍內

bool row[maxn], colum[maxn];

int rused, cused;

沿著「正難則反」的道路,我選擇了計算已經被用過的方塊,最後用總塊數去減(不要問我為什麼不直接算= =雖然正面還要簡單些)。然而,我卻選擇了這樣輸出答案:

int ans = n * n - ((rused + cused) * n - rused * cused);

cout << ans

<< endl;

沒什麼問題麼?然而:

n * n

成功地**了。。。

所以說,如果題目中有可能有超出int範圍的資料,在空間允許的情況下,盡量使用long long。如果可能,最好在除了迴圈變數的其它地方進行統一。

2 圖這道題將面臨乙個新的問題:如何輸出。由於這道題輸出量比較大,使用cout進行輸出有點吃力,而printf輸出長整形的時候可能會遇到跨平台問題(最扯的是lemon,同乙個編譯器,它偏偏只支援%i64d。所以還是得自己寫輸出函式。。。)

inline

void printout(int x) //自己去簡化,只有當輸出量極大時才建議加上:寫錯了會得不償失

bool minus = x < 0;

if (minus) x = -x;

char temp[20] = ;

int length = 0;

while (x)

if (minus)

while (true)

}

更可怕的是計算2k

時極易出錯。一般來說,計算2k

時使用1 << k便足矣。然而,這道題的k最多要計算到233

。這時,絕對不要使用1 << k,而應當使用:

1ll << k
這裡建議:計算2k

時,先寫成1ll,就算不可能超出範圍,也可以稍後來改。千萬不要為了省下型別轉換的時間把分丟掉。

強烈建議全域性大int。 orz

20151006模擬賽總結

今天上午去一中,又考了個模擬賽。這次的題有點考思維。我感覺這個第一題難度稍微大了點。一般noip第一題要麼是簡單的模擬,要麼是裸的簡單演算法,這次的第一題要自己構造演算法,並且還是列舉和貪心套在一起。我開始想的是列舉 揹包,複雜度為n 3,但是資料範圍沒給出三次方的分。於是我就覺得不靠譜。然後發現列...

20151031模擬賽總結

今天去一中,考了個模擬賽,真是坑。本來在八中食堂愉快的享受我的早飯 週末早上的番茄雞蛋燙飯 韭菜肉餅簡直爽!然後geng4512就跑過來說要去一中考試,然後兩口喝完燙飯就和他一起狂跑過去了。這次第一題組合數取模,模的不是質數。想了好大半天,沒什麼想法,然後看了下後面的題,又回來做這道題,想起了階乘分...

20160521模擬賽總結

20160521模擬賽是程式設計實習課程安排的第一次模擬賽 比賽鏈結 備註 這個系列模擬賽屬於程式設計實習練習賽,題目有很大一部分事先練習過,做這些題目為了練習碼 熟練度,也為了進行模擬考試練習的機會,所以這個系列模擬賽我每一次都參加,作為練習 題目清單見下 已解決 01 浮點數求高精度冪 已解決 ...