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 浮點數求高精度冪 已解決 ...