日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces Round #527 (Div. 3) 总结 A B C D1 D2 F

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #527 (Div. 3) 总结 A B C D1 D2 F 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

A

貪心的取

每個字母n/k次

令r=n%k

讓前r個字母各取一次

1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define rep(i, a, b) for (int i = a; i <= b; ++i) 5 6 int t, n, k; 7 8 int main() { 9 cin >> t; 10 11 while (t--) { 12 cin >> n >> k; 13 int x = n / k, r = n - x * k; 14 rep(i, 1, k) rep(j, 1, x) { 15 cout << (char)('a' + i - 1); 16 } 17 rep(i, 1, r) { 18 cout << (char)('a' + i - 1); 19 } 20 cout << '\n'; 21 } 22 return 0; 23 }

B

排序完連續兩個比較

證明一下吧:max(a[2] - a[1]), a[4] - a[3]) <= max(a[3] - a[1]), a[4] - a[2]) (后者的間隙大)?

1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define rep(i, a, b) for (int i = a; i <= b; ++i) 5 6 const int N = 1e5 + 7; 7 8 int n, a[N]; 9 10 int main() { 11 cin >> n; 12 13 rep(i, 1, n) { 14 cin >> a[i]; 15 } 16 17 sort(a + 1, a + n + 1); 18 19 int ans = 0; 20 rep(i, 1, n / 2) { 21 ans += a[i * 2] - a[i * 2 - 1]; 22 } 23 24 cout << ans << '\n'; 25 26 return 0; 27 }

C

題意難理解

找出最長的兩個串 判斷哪個是最長前綴

f[len]代表著長度為len的前后綴是否被選 用來避免長度為len的兩個子串都是前綴或都是后綴的情況

1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define rep(i, a, b) for (ll i = a; i <= b; ++i) 5 6 const int N = 507; 7 8 ll n; 9 bool f[N]; 10 string s[N]; 11 12 int main() { 13 cin >> n; ll m = 2 * n - 2; 14 15 string s1 = "", s2 = ""; 16 rep(i, 1, m) { 17 cin >> s[i]; 18 if (s[i].size() > s1.size()) s1 = s[i]; 19 else if (s[i].size() == s1.size()) s2 = s[i]; 20 } 21 22 ll cnt = 0; 23 rep(i, 1, m) if (s1.substr(0, s[i].size()) == s[i]) { 24 if (s[i] != s2) cnt++; 25 } 26 27 string pre; 28 if (cnt >= n - 1 && s1.substr(1, s1.size() - 1) == s2.substr(0, s1.size() - 1)) pre = s1; else pre = s2; 29 30 rep(i, 1, m) { 31 if (pre.substr(0, s[i].size()) == s[i] && !f[s[i].size()]) { 32 cout << 'P'; 33 f[s[i].size()] = 1; 34 } 35 else cout << 'S'; 36 } 37 38 return 0; 39 }

D1 D2

兩題類似

用一個棧 若當前高度和棧頂一致就彈出 具體判斷見代碼

1 //D1 2 #include <bits/stdc++.h> 3 using namespace std; 4 typedef long long ll; 5 #define rep(i, a, b) for (int i = a; i <= b; ++i) 6 7 const int N = 2e5 + 7; 8 9 int n; 10 bool a[N]; 11 stack <bool> st; 12 13 int main() { 14 scanf("%d", &n); 15 16 int x; 17 rep(i, 1, n) { 18 scanf("%d", &x); 19 a[i] = x & 1; 20 } 21 22 rep(i, 1, n) { 23 if(st.empty()) 24 st.push(a[i]); 25 else if(a[i] == st.top()) 26 st.pop(); 27 else 28 st.push(a[i]); 29 } 30 31 st.size() > 1 ? puts("NO") : puts("YES"); 32 33 return 0; 34 } 1 //D2 2 #include <bits/stdc++.h> 3 using namespace std; 4 typedef long long ll; 5 #define rep(i, a, b) for (int i = a; i <= b; ++i) 6 7 int n, mx; 8 stack <int> s; 9 10 int main() { 11 scanf("%d", &n); 12 13 int x; 14 rep(i, 1, n) { 15 scanf("%d",&x); 16 mx=max(mx,x); 17 if (s.empty()) 18 s.push(x); 19 else if (s.top()==x) 20 s.pop(); 21 else if (s.top()>=x) 22 s.push(x); 23 else { 24 puts("NO"); 25 return 0; 26 } 27 } 28 29 if (!s.size()) 30 puts("YES"); 31 else if (s.size() == 1 && s.top() == mx) 32 puts("YES"); 33 else 34 puts("NO"); 35 36 return 0; 37 }

E

blank

?

F

初始思路是:維護樹上的一堆和亂搞

其實dfs2的操作十分巧妙

1.res -= sum[v] 代表 v子樹下的每個點的距離都少了1

2.sum[u] -= sum[v]; 為下一步做準備

3.res += sum[u]; 代表 u子樹下(除)的每個點的距離都多了1

4.sum[v]+=sum[u]; dfs2到下一層的時候 (假如邊為(v,w)) res+= sum[v](即步驟3)的時候v點外u點子樹下的一些點到w的距離也多了1

1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 5 #define rep(i, a, b) for (int i = a; i <= b; ++i) 6 7 const int N = 2e5 + 7; 8 9 int n; 10 11 ll a[N], sum[N], res, ans; 12 13 vector <int> e[N]; 14 15 void dfs1(int u, int p = 0, int d = 0) { 16 res += d * a[u]; 17 sum[u] = a[u]; 18 for (auto v : e[u]) if (v != p) { 19 dfs1(v, u, d + 1); 20 sum[u] += sum[v]; 21 } 22 } 23 24 void dfs2(int u, int p = 0) { 25 ans = max(ans, res); 26 for (auto v : e[u]) if (v != p) { 27 res -= sum[v]; 28 sum[u] -= sum[v]; 29 res += sum[u]; 30 sum[v] += sum[u]; 31 32 dfs2(v, u); 33 34 sum[v] -= sum[u]; 35 res -= sum[u]; 36 sum[u] += sum[v]; 37 res += sum[v]; 38 } 39 } 40 41 int main() { 42 scanf("%d", &n); 43 44 rep(i, 1, n) { 45 scanf("%lld", &a[i]); 46 } 47 48 int u, v; 49 rep(i, 1, n - 1) { 50 scanf("%d%d", &u, &v); 51 e[u].push_back(v); 52 e[v].push_back(u); 53 } 54 55 dfs1(1); 56 dfs2(1); 57 58 printf("%lld\n", ans); 59 60 return 0; 61 }

?

轉載于:https://www.cnblogs.com/Fo0o0ol/p/10164365.html

總結

以上是生活随笔為你收集整理的Codeforces Round #527 (Div. 3) 总结 A B C D1 D2 F的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天宗合 | 吊侵犯の奶水授乳羞羞漫画 | 韩日精品在线 | 成人黄色一区二区三区 | 台湾综合色 | 一区二区三区不卡视频 | www亚洲色图 | 久久成人网18网站 | 特黄网站| 天堂在线网 | 免费观看已满十八岁 | 久久久高潮 | 男女啪啪在线观看 | 亚洲av无码专区国产乱码不卡 | 夜夜夜夜夜操 | 国产粉嫩一区二区三区 | 日韩有码专区 | 亚洲视频一区二区 | 成人午夜福利一区二区 | 青青青草视频在线 | 极品探花在线 | 黄色污污视频软件 | 国产欧美一区二区三区鸳鸯浴 | 国产丝袜视频在线观看 | 国产a国产片 | 一级片免费在线 | 黄色理伦 | 国产男女视频 | 男人激烈吮乳吃奶爽文 | 久久av一区二区三区亚洲 | 亚洲精品视频大全 | 夜夜嗨一区二区三区 | 精品国产三级 | 超级碰在线观看 | 狠狠躁天天躁夜夜躁婷婷 | 丁香啪啪 | 青青草超碰在线 | 国产伦精品一区二区三区视频网站 | jizzzz中国| 日韩高清久久 | 国产一区自拍视频 | 俄罗斯videodesxo极品 | 国产免费美女 | 99热9| 婷婷久久丁香 | 国产精品欧美激情 | 黄色精品网站 | 成人精品一区二区三区电影黑人 | 国产一区二区三区久久 | 中文字幕一区二区三三 | 国产一区二区免费 | 东京干手机福利视频 | 51精品国产人成在线观看 | 亚洲 欧美 激情 另类 校园 | 影音先锋在线看 | 欧美视频观看 | 九九九精品视频 | 免费国产小视频 | 茄子av在线 | 一级片免费在线 | yy4138理论片动漫理论片 | 激情五月五月婷婷 | 国产视频最新 | 在线观看成人免费 | 欧美先锋影音 | 91禁蘑菇在线看 | 婷婷视频网 | 99热只有 | 亚洲精品综合在线观看 | 操极品女神 | 337p粉嫩色噜噜噜大肥臀 | 日韩精品成人一区 | 色综网 | 蜜桃中文字幕 | 免费视频日韩 | 成人熟女一区二区 | 国产剧情av引诱维修工 | 国产精品国产一区二区三区四区 | 香港三级日本三级 | 日韩视频第一页 | 已满18岁免费观看电视连续剧 | 超碰成人免费电影 | 免费中文字幕日韩欧美 | 娇小萝被两个黑人用半米长 | 少妇免费毛片久久久久久久久 | 3344av| 偷拍亚洲色图 | 黄色喷水视频 | 99视频一区| 中国精品视频 | 麻豆疯狂做受xxxx高潮视频 | 欧美日韩在线观看视频 | 久久久久逼 | www.久久精品视频 | 精品国产一区一区二区三亚瑟 | 先锋影音一区二区三区 | 久久久久久www | www.人人草| 国产成人精品在线播放 |