2019牛客多校 Round3

2022-05-09 01:24:10 字數 2617 閱讀 4691

solved:3

rank:105

治哥出題了 我感動哭了

a graph game (分塊)

題意:1e5個點 2e5條邊 s(x)表示與x點直接相鄰的點集合

有兩種操作 1種將按輸入順序的邊第l條到第r條邊翻轉 連線->切斷 切斷->鏈結

還有一種詢問 s(x)與s(y)是否相等

題解:題解說 可以給每個點隨機乙個值 然後s(x)可以用與x直接相鄰的點xor起來 (還有這種操作???

然後我們把邊分塊 翻轉操作就是xor操作 每個點之間邊的狀態是一樣的 所以可以共用

而且對一條邊的修改 影響的只有兩個點的資訊 所以對塊兩邊的邊暴力修改他所影響的點

#include using

namespace

std;

const

int maxn = 1e5 + 5

;int

n, m, blo;

int bl[maxn << 1

];int sum[maxn][505

];int

now[maxn];

intval[maxn];

int u[maxn << 1

];int v[maxn << 1

];int vis[505

];void update(int l, int

r)

if(bl[l] !=bl[r])

}for(int i = bl[l] + 1; i < bl[r]; i++) vis[i] ^= 1;}

intmain()

int qu; scanf("

%d", &qu);

while(qu--)

}if(ans1 == ans2) printf("1"

);

else printf("0"

); }

}puts(

"");

}return0;

}

a graph game

f planting trees

題意:500x500的矩陣 求乙個最大的子矩陣 使得區間最大減最小<=m

題解:列舉縱座標的區間 對於每乙個區間 從第一行開始 單調尺取搞一搞

#include using

namespace

std;

int a[505][505

];int zd[505

];int zx[505

];int qd[505

];int qx[505

];int

main()

int ans = 1

;

for(int j = 1; j <= n; j++)

for(int k = j; k <= n; k++)

int lx = 1, rx = 0

;

int ld = 1, rd = 0

;

int nowl = 1

;

for(int i = 1; i <= n; i++)

if(nowl <= i && zd[qd[ld]] - zx[qx[lx]] <=m) }}

}printf(

"%d\n

", ans);

}return0;

}

f planting trees

g removing stones

題意:n堆石子 每次可以選擇兩堆不同的各拿走乙個 如果能拿完 就表示獲勝

如果石子的和為奇數 則將最少的一堆石子數-1

問有多少對區間 能獲勝

題解:顯然 題目等於 計算 區間max * 2 <= 區間和的個數

考慮反問題 計算max * 2 > 區間和

然後直接暴力列舉每個點作為最大值 往前搞搞 往後搞搞

巧妙的是這樣的時間複雜度其實並不高 要讓這樣暴力列舉的時間複雜度退化到n方的資料 顯然是ai >= ai+1  * 2

舉個例子長度為5的陣列 16 8 4 2 1 能讓暴力列舉的複雜度退化到n方 但是ai < 1e9

均攤一下每個數的平均列舉到log

#include using

namespace

std;

typedef

long

long

ll;ll a[

300005

];ll pre[

300005

];int

main()

}ans +=cnt;

ll sum = 0

;

for(int j = i - 1; j >= 1; j--)

if(sum + pre[r] < a[i]) ans +=r;

else ans +=l;}}

ans = n * (n - 1) / 2 -ans;

printf(

"%lld\n

", ans);

}return0;

}

g removing stones

2019牛客多校 Round8

solved 3 rank 261 e explorer 線段樹 題意 n個點 m條邊 每條邊只有身高l,r內的人可以穿過 問有幾種身高可以從1走到n 題解 把l,r離散化後 左閉右開 線段樹葉子節點維護區間 然後從線段樹根節點dfs下去 這個區間能不能產生貢獻的關鍵在於1和n的聯通 所以用可撤銷的...

2018牛客多校3

h diff prime pairs 1 3 1 5 1 7 1 11.2 3 2 5 2 7 2 11.3 3 3 5 3 7 3 11.4 3 4 5 4 7 4 11.打個素數表 用素數篩一遍 includeusing namespace std bool a 11111111 int zs ...

19牛客暑期多校 round2 F dfs

題目傳送門 res tp nowcoder dfs先將所有人都歸於一隊,之後從一隊中取出人放置到另乙個隊。include include includeusing namespace std typedef long long ll int n const int l 30 ll a l l ll ...