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...