hdu 4365 瞎塗顏色 數論

2021-06-08 13:32:18 字數 1149 閱讀 6043

這題給乙個n*n的正方形塗色,使之成為又中心對稱又軸對稱的圖形。

給出了m點已經塗色,會告訴你他們的座標。 再告訴你用k種顏色塗。

不考慮已經塗色的情況:

這題是一圈一圈地考慮,對於每個圈,只考慮一條邊的一半,即(n + 1) >> 1;        對於每一圈都如此。    那麼總的可以由k種顏色中任意塗的個數total是1 + 2 + 3 + …… + (1 + n) >> 1;

考慮已經塗色的:

那麼就在total裡面減去已經塗色的。

重點在於去重。

對於每一圈來說,將應該塗相同顏色的位置對映到乙個位置。

對於map,我只能說無能為力。           比如,先插入(1,2)、再插入(1,3)。 對於map.insert( make_pair(x,y) ), 人家輸出的是(1,2)。也就是他插不進去(1,3); 對於map[x] = y, 人家輸出的是(1,3)。也就是他把原來給覆蓋了。

所以這裡用的是手動版。

還有乙個地方不解的是,對於去重,離中心點相同距離的點應該都為同一種顏色。所以,我將m個座標離中心點的距離放在乙個為double型的陣列裡面,wa了。不解。

以下是ac**:

#include #include #include #include #include #include #include #include #include #include #include #include #define f(x) ((x)>nn?n-(x)+1:(x));

using namespace std;

const __int64 m=100000007;

typedef __int64 ll;

long long fun(long long a,long long n,long long p)

return ret;

}struct loca

}point[2100];

int main()

sort(point,point + sub);

if(m)

else t = 0;

t = (nn + 1) * nn / 2 - t;

printf("%i64d\n",fun(k,t,m));

}return 0;

}

leetcode436 尋找右區間

給定一組區間,對於每乙個區間 i,檢查是否存在乙個區間 j,它的起始點大於或等於區間 i 的終點,這可以稱為 j 在 i 的 右側 對於任何區間,你需要儲存的滿足條件的區間 j 的最小索引,這意味著區間 j 有最小的起始點可以使其成為 右側 區間。如果區間 j 不存在,則將區間 i 儲存為 1。最後...

leetcode 436 尋找右區間

給定一組區間,對於每乙個區間 i,檢查是否存在乙個區間 j,它的起始點大於或等於區間 i 的終點,這可以稱為 j 在 i 的 右側 對於任何區間,你需要儲存的滿足條件的區間 j 的最小索引,這意味著區間 j 有最小的起始點可以使其成為 右側 區間。如果區間 j 不存在,則將區間 i 儲存為 1。最後...

Leetcode 436 尋找右區間

給定一組區間,對於每乙個區間 i,檢查是否存在乙個區間 j,它的起始點大於或等於區間 i 的終點,這可以稱為 j 在 i 的 右側 對於任何區間,你需要儲存的滿足條件的區間 j 的最小索引,這意味著區間 j 有最小的起始點可以使其成為 右側 區間。如果區間 j 不存在,則將區間 i 儲存為 1。最後...