注意精度問題即可
建顆 trie 樹搞一搞即可
考慮用原根解決此問題,乘法變為了加法,因此用桶記錄一下 fft 即可
觀察題目性質容易發現樹高事 \(\log n\) 的,即使是暴力列舉第一棵樹最淺的點複雜度也正確。
因此就暴力列舉,那麼一條合法的路徑肯定是分別走向兩個兒子的,考慮從左兒子走到第二棵樹每個節點的貢獻,然後再走右兒子找交集即可,注意在更深處有了交集要把父親的貢獻減掉。
好題!用兩個簡單運算構建起更複雜到操作!
首先你只能有 加 和 比較 兩種運算,實現乘法運算。
首先造出 1,\(1 = 0 < (a+b)\) 如果 \(a = b = 0\) 顯然陣列所有的數都是 0,沒有影響的。
計算機是怎樣的系統?二進位制!所以考慮二進位制下的一些運算,有些函式可能與本題無關
a & b = 1 < (a + b)
a | b = 0 < (a + b)
(a < b) + (b < a)
a[0] = 1;
for (int i = 1;i <= k; i++)
add(a[0], a[0], 0)
\(ans = (x>0)<
倒著列舉最高位,如果當前數 \(x\) 比 \(2^i\) 大,那麼讓 \(x -= 2^i\)。
減法顯然可以移過去變成加法,然後就是乙個整次冪乘 0/1 的問題。
先將 a,b 二進位制拆分,然後直接乘就行了。
for(int k = 58; k >= 0; k--) }}
這樣這道題就已經做完了,我們想想其他的操作。
顯然我們不可能得出負數,所以實際得出的是 \(\max(0,x-y)\)
將 \(x-y\) 二進位制拆分式的列舉,然後就是二的整次冪乘 0/1
還是二進位制拆分式的列舉即可
也是 nb 題
按照題解的說法,我們分三步走
先按 x 排序,對於乙個點來說,顯然能走到的區域是乙個區間 \([l,r]\),考慮區間 dp,首先列舉位置 t,\(dp[l][r][0/1]\) 表示從位置 t 開始,已經走過區間 \([l,r]\),目前在左右端點的最小代價是多少,轉移顯然。
容易發現從乙個位置有大量的走不到區間,且兩個位置有大量的公共區間。考慮倒著 dp,設 \(dp[l][r][0/1]\) 表示從 \([l, r]\) 開始,已經解決了 \([1,l)\cup(r,n]\) 這部分能到的地方的最小代價。這樣就是 \(\theta(n^2)\) 的了。
從任意一點出發,顯然只有兩種情況,走到最右邊再回來和走到最左邊再回來。
從中間那個舉行出發,只有這兩種情況是合法的,手玩一下可以發現其他的情況都會被擋住,這樣就轉化為了內部是 \(subtask2\),整體做 \(subtask1\) 了
看**會清楚些
const int n = 200500, m = 1000050;
int t[m], x[n], y[n], tx[n], ty[n];
int lt[n], rt[n], n;
void rankit(int *x)
struct node
}p[n];
#include map, ll> f[2];
inline int abs(int x)
inline int dis(int a, int b)
const ll inf = 1e18;
ll ans[n];
ll dp(int u, int d, int l, int r, int k)
if (r < n && (p[r+1].y == d - 1 || p[r+1].y == u + 1))
return f[k][mp(l, r)] = (ans == inf ? l - r : ans);
}int main() ;
sort(p + 1, p + n + 1);
lt[1] = 1, rt[n] = n;
for (int i = 2;i <= n; i++)
lt[i] = abs(p[i].y - p[i-1].y) == 1 ? lt[i-1] : i;
for (int i = n - 1; i; i--)
rt[i] = abs(p[i+1].y - p[i].y) == 1 ? rt[i+1] : i;
for (int i = 1;i <= n; i++)
ans[p[i].id] = dp(p[i].y, p[i].y, i, i, 0);
for (int i = 1;i <= n; i++) write(ans[i]);
return 0;
}
AGC025簡要題解
b rgb coloring 一道簡單題,列舉即可。c interval game 考慮可以進行的操作只有兩種,即左拉和右拉,連續進行兩次相同的操作是沒有用的。左拉時肯定會選擇右端點盡量小的,右拉選擇左端點盡量大的,所以排序之後貪心即可。d choosing points 首先證明對於所有 d 假設...
AGC044 簡要題解(部分)
乍一看資料範圍非常唬人,但是仔細思考一下就可以發現這樣乙個事實 從 x 逆著執行操作回到 0 的時候,除了最後一次連續執行若干次 1 操作直至 0 之外,其餘的時候,每兩次除法之間,用 pm1 造成的增量只會在 2,2 之間。實際上,如果下一次除數是 2 或 3 那麼增量只會在 1,1 之間。證明只...
AGC 049 部分簡要題解
nmd 差1分鐘過 e,真就老年選手不配進第一頁 ll 計算每個點的貢獻,做完了 includeusing namespace std typedef long long ll const int n 110 string s n int n bitsettow n int main int s n...