2020hdu多校第三場比賽及補題

2022-06-17 21:30:15 字數 2389 閱讀 4439

1004 tokitsukaze and multiple

隊友半小時內a了這題,強的一匹!

給一列數,每次可以把相鄰的兩個數合併成乙個大數(比如12,74合併成86),給乙個數字p,問通過這樣的操作,最多能使這數列中多少數是p的倍數

舉例:p = 3, 數列為 2, 1, 3, 2, 1

該數列可以變成3,3,3, 答案就是3

這題我做的話半小時應該不能做出來

可以用貪心的方法線性做,從左往右掃,每當判斷出能合併出符合要求的數時就合併

這個貪心和那個關於區間的貪心模板題很像

事實上,這題假設我們已知所有能合成出符合要求的數的區間,問題就變成在這些區間裡找出最多的互不重合的區間,那就是把這些區間按右端點排序

隊友這題寫的**並不是很美觀,但還是很強的

賽後我自己也做了一遍,下面的是我的**

#include#include#includeusing namespace std;

const int maxn = 1e5+7;

int a[maxn], last[maxn];

int main()

last[su] = i;

} cout<1005 little w and contest

這裡就不敘述題意了

這題隊友寫的,隊友寫的很整齊,很美觀

但是wa了很多發,很慘

比賽到後期的時候,隊友叫我看這題,給了我題意和他的做法,我覺得他的做法沒問題,**也寫的很好,查不出什麼錯,我找到乙個地方可能有問題,就是乙個取模的地方他是+mod 再%mod,我感覺+2*mod再%mod會更保險,然後隊友改了下,還真就過了,隊友氣死了....

我之後才學到乙個更保險的辦法是先%mod,再+mod,再%mod

#include using namespace std;

#define int long long

const int maxn = 1e5 + 7;

const int mod = 1e9 + 7;

int fac[maxn], inv[maxn];

inline void pre(int n)

inline int c(int n, int m)

// 計算組合數

inline int pow(int a, int b)

// 快速冪

int t;

int n;

int pts[maxn];

int u, v;

int ans;

int tmp1, tmp2;

struct dsu

else

rank[i] = 0;}}

int find_parent(int x)

bool check_unicom(int x, int y)

void merge(int x, int y)

}int getsum1(int i)

int getsum2(int i)

}dsu;

int32_t main(void)

if (pts[i] == 2)

}dsu.init_parent(n);

ans = (c(tmp2, 2) % mod * tmp1 % mod) % mod + c(tmp2, 3) % mod;

ans %= mod;

cout << ans << endl;

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

ans %= mod;

cout << ans << endl;}}

return 0;

}

隊友喜歡把並查集寫成結構體,我通常不這樣做。

1009 parentheses matching

這場的簽到題,括號匹配題

括號匹配的棧模擬題我還挺怕的,所以我很早看了這題後就把這題先放了,把這題交給隊友解決,自己想其他題,然而我什麼也沒想出來,隊友也一直沒做出這題,我還是得來寫這題

寫了幾遍才知道怎麼寫好

因為是字典序最小,所以:

缺 ( 時,要把最左邊的 * 變成 (

缺 ) 時,要把最右邊的 * 變成 )

#include#include#includeusing namespace std;

stackst;

char ans[100007];

int main()}}

} if(!flag)

else

else if(s[i]=='*') cnt1++;

else}}

}if(!flag)

for(int i = len - 1;i>=0&&cnt第三場一題都補不來oao,1006太難了

hdu多校第三場

題意是將給出的數相加計算出 其中p 的倍數的最大個數。由題意可得,在任意兩個數相加時,其模值必在0 p 1之間,將兩數相加的模值替換掉之前的兩個數字,得到長度減一的效果,用0和1 標記對應模值是否出現,從而代表被處理過的但還沒有達到 p 的倍數的值,直到某次得到的模值為 0 時,再清空之前的標記 代...

2020牛客多校第三場

沒有魚,沒有魚餌 沒有魚,有魚餌 有魚,沒魚餌 有魚,有魚餌 每個只能做其中乙個操作,如果在某個點之前已經拿過魚餌,還沒用,就能拿個魚,如果在某個點有魚,就能拿個魚。現在問最多能拿多少條魚?思路 貪心,如果有魚那肯定拿魚,魚 1,然後就剩0和1操作了,如果遇到1操作,直接拿魚餌,遇到0操作,看有沒有...

2020杭電多校第三場

求和為p的倍數的塊的最大數量,我用了比較暴力的做法,好像有dp的做法?include using namespace std typedef long long ll define rep i,a,b for register int i a i b i intn,p intf,ans,flag i...