传送门

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相关推荐

  1. 【Codeforces Round #540 (Div. 3)】 A B C D1 D2 E F1

    A 题意 给你一升水和两升水的价格 问你怎么买便宜 做法 模拟即可 #include <cstdio> #include <cstring> #include <iost ...

  2. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  3. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  4. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  5. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  6. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  7. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  8. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  9. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

最新文章

  1. Jmeter 可视化监控
  2. 无密码进去mysql_技术分享 | 安全地无密码登录 MySQL
  3. Typescript中使用Axios
  4. spark dataFrame withColumn
  5. leetcode712. 两个字符串的最小ASCII删除和(动态规划)-Gogo
  6. Java元数据总结:Java注释的使用和定义
  7. php原生态三级联动_ajax php实现三级联动的方法
  8. php 文件 后缀,php如何修改文件后缀名
  9. ajax js图片上传到php,Ajax上传并预览图片(附代码)
  10. sublime text3 炫酷主题
  11. 关于matlab的erf与erfc
  12. 3D建模京东商品3D展示怎么做?
  13. Tableau长期免费使用的方法总结(包括Tableau Public,Tableau Desktop,Tableau Pre,Tableau eLearning)
  14. html5适应手机比例,HTML5 如何让手机网站自适应设备屏幕宽度
  15. orge_src版编译与安装
  16. Infopath技术
  17. halcon,分享一个想法,数米粒个数
  18. 一月笔记-JAVA-超市管理系统
  19. pandas.pivot()函数的使用
  20. 倍福--RS232自由口实现

热门文章

  1. Delphi 中将对象作为参数传递的使用
  2. 为什么`malloc`出来的内存也能当成对象正常使用
  3. Java平台无关性——跨平台
  4. 关于解决tomcat的一个错误
  5. RFC894--以太网上IP数据报的传输标准
  6. JS:js 数组赋值问题 :值传递还是引用?
  7. linux iptables 如何设置允许几个 ip访问,Linux防火墙iptables限制几个特定ip才能访问服务器。...
  8. 使用snmp4j实现Snmp功能(三)
  9. 小米手环无法模拟门卡_MIUI12轻体验:关于模拟门禁卡,你想知道的都在这里
  10. android怎么用别人的工程,Android导入别人的工程