Codeforces Round #527 (Div. 3) 总结 A B C D1 D2 F
A
贪心的取
每个字母n/k次
令r=n%k
让前r个字母各取一次
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (int i = a; i <= b; ++i) int t, n, k; int main() {
cin >> t; while (t--) {
cin >> n >> k;
int x = n / k, r = n - x * k;
rep(i, , k) rep(j, , x) {
cout << (char)('a' + i - );
}
rep(i, , r) {
cout << (char)('a' + i - );
}
cout << '\n';
}
return ;
}
B
排序完连续两个比较
证明一下吧:max(a[2] - a[1]), a[4] - a[3]) <= max(a[3] - a[1]), a[4] - a[2]) (后者的间隙大)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (int i = a; i <= b; ++i) const int N = 1e5 + ; int n, a[N]; int main() {
cin >> n; rep(i, , n) {
cin >> a[i];
} sort(a + , a + n + ); int ans = ;
rep(i, , n / ) {
ans += a[i * ] - a[i * - ];
} cout << ans << '\n'; return ;
}
C
题意难理解
找出最长的两个串 判断哪个是最长前缀
f[len]代表着长度为len的前后缀是否被选 用来避免长度为len的两个子串都是前缀或都是后缀的情况
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (ll i = a; i <= b; ++i) const int N = ; ll n;
bool f[N];
string s[N]; int main() {
cin >> n; ll m = * n - ; string s1 = "", s2 = "";
rep(i, , m) {
cin >> s[i];
if (s[i].size() > s1.size()) s1 = s[i];
else if (s[i].size() == s1.size()) s2 = s[i];
} ll cnt = ;
rep(i, , m) if (s1.substr(, s[i].size()) == s[i]) {
if (s[i] != s2) cnt++;
} string pre;
if (cnt >= n - && s1.substr(, s1.size() - ) == s2.substr(, s1.size() - )) pre = s1; else pre = s2; rep(i, , m) {
if (pre.substr(, s[i].size()) == s[i] && !f[s[i].size()]) {
cout << 'P';
f[s[i].size()] = ;
}
else cout << 'S';
} return ;
}
D1 D2
两题类似
用一个栈 若当前高度和栈顶一致就弹出 具体判断见代码
//D1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (int i = a; i <= b; ++i) const int N = 2e5 + ; int n;
bool a[N];
stack <bool> st; int main() {
scanf("%d", &n); int x;
rep(i, , n) {
scanf("%d", &x);
a[i] = x & ;
} rep(i, , n) {
if(st.empty())
st.push(a[i]);
else if(a[i] == st.top())
st.pop();
else
st.push(a[i]);
} st.size() > ? puts("NO") : puts("YES"); return ;
}
//D2
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (int i = a; i <= b; ++i) int n, mx;
stack <int> s; int main() {
scanf("%d", &n); int x;
rep(i, , n) {
scanf("%d",&x);
mx=max(mx,x);
if (s.empty())
s.push(x);
else if (s.top()==x)
s.pop();
else if (s.top()>=x)
s.push(x);
else {
puts("NO");
return ;
}
} if (!s.size())
puts("YES");
else if (s.size() == && s.top() == mx)
puts("YES");
else
puts("NO"); return ;
}
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
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; #define rep(i, a, b) for (int i = a; i <= b; ++i) const int N = 2e5 + ; int n; ll a[N], sum[N], res, ans; vector <int> e[N]; void dfs1(int u, int p = , int d = ) {
res += d * a[u];
sum[u] = a[u];
for (auto v : e[u]) if (v != p) {
dfs1(v, u, d + );
sum[u] += sum[v];
}
} void dfs2(int u, int p = ) {
ans = max(ans, res);
for (auto v : e[u]) if (v != p) {
res -= sum[v];
sum[u] -= sum[v];
res += sum[u];
sum[v] += sum[u]; dfs2(v, u); sum[v] -= sum[u];
res -= sum[u];
sum[u] += sum[v];
res += sum[v];
}
} int main() {
scanf("%d", &n); rep(i, , n) {
scanf("%lld", &a[i]);
} int u, v;
rep(i, , n - ) {
scanf("%d%d", &u, &v);
e[u].push_back(v);
e[v].push_back(u);
} dfs1();
dfs2(); printf("%lld\n", ans); return ;
}
Codeforces Round #527 (Div. 3) 总结 A B C D1 D2 F的更多相关文章
- Codeforces Round #527 (Div. 3) ABCDEF题解
Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...
- Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】
传送门:http://codeforces.com/contest/1092/problem/F F. Tree with Maximum Cost time limit per test 2 sec ...
- Codeforces Round #527 (Div. 3) D2. Great Vova Wall (Version 2) 【思维】
传送门:http://codeforces.com/contest/1092/problem/D2 D2. Great Vova Wall (Version 2) time limit per tes ...
- Codeforces Round #527 (Div. 3) D1. Great Vova Wall (Version 1) 【思维】
传送门:http://codeforces.com/contest/1092/problem/D1 D1. Great Vova Wall (Version 1) time limit per tes ...
- Codeforces Round #527 (Div. 3) C. Prefixes and Suffixes
题目链接 题意:给你一个长度n,还有2*n-2个字符串,长度相同的字符串一个数前缀一个是后缀,让你把每个串标一下是前缀还是后缀,输出任意解即可. 思路;因为不知道前缀还是后缀所以只能搜,但可以肯定的是 ...
- Codeforces Round #527 (Div. 3) . F Tree with Maximum Cost
题目链接 题意:给你一棵树,让你找一个顶点iii,使得这个点的∑dis(i,j)∗a[j]\sum dis(i,j)*a[j]∑dis(i,j)∗a[j]最大.dis(i,j)dis(i,j)dis( ...
- Codeforces Round #527 (Div. 3)
一场div3... 由于不计rating,所以打的比较浪,zhy直接开了个小号来掉分,于是他AK做出来了许多神仙题,但是在每一个程序里都是这么写的: 但是..sbzhy每题交了两次,第一遍都是对的,结 ...
- Codeforces Round #527 (Div. 3)F(DFS,DP)
#include<bits/stdc++.h>using namespace std;const int N=200005;int n,A[N];long long Mx,tot,S[N] ...
- Codeforces Round #527 (Div. 3)C(多重集,STRING)
#include<bits/stdc++.h>using namespace std;const int maxn=1e6+7;pair<string,int>p[maxn]; ...
随机推荐
- Windows和linux环境下按文件名和字符串搜索命令
Windows 1.遍历C盘下所有txt 命令:for /r c:\ %i in (*.txt) do @echo %i 注释:for 循环的意思 /r 按照路径搜索 c:\ 路径 %i in ( ...
- POJ 2778:DNA Sequence(AC自动机构造矩阵)
http://poj.org/problem?id=2778 题意:有m个病毒DNA,问构造一个长度为n的不带病毒DNA的字符串可以有多少种. 思路:看到这题有点懵,想了挺久题解的思路. 使用AC自动 ...
- spring springMVC Struts2 区别
Spring: Spring是IOC和AOP的容器框架,Spring是一个通用解决方案, 最大的用处就是通过Ioc/AOP解耦, 降低软件复杂性, 所以Spring可以结合SpringMVC等很多其他 ...
- Windows下必备的开发神器之Cmder使用说明
诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...
- Python 定义自己的常量类
在实际的程序开发中,我们通常会将一个不可变的变量声明为一个常量.在很多高级语言中都会提供常量的关键字来定义常量,如 C++ 中的 const , Java 中的 final 等,但是 Python 语 ...
- RestTemplate真实案例
1. 场景描述 现在越来越的系统之间的交互采用http+json的交互方式,以前用的比较多的HttpClient,后来用的RestTemplate,感觉RestTemplate要比httpClent简 ...
- Java编程思想:利用内部类实现的工厂模式
public class Test { public static void main(String[] args) { Factories.test(); } } /* 设计模式之禅中的工厂模式是这 ...
- Flink实战(七) - Time & Windows编程
0 相关源码 掌握Flink中三种常用的Time处理方式,掌握Flink中滚动窗口以及滑动窗口的使用,了解Flink中的watermark. Flink 在流处理工程中支持不同的时间概念. 1 处理时 ...
- LiteDB源码解析系列(4)跳表基本原理
LitDB里面索引的数据结构是用跳表来实现的,我知道的开源项目中使用跳表的还包括Redis,大家可以上网搜索关于Redis的跳表功能的实现.在这一章,我将结合LiteDB中的示例来讲解跳表. 1.跳表 ...
- python整型-浮点型-字符串-列表及内置函数(上)
整型 简介 # 是否可变类型: 不可变类型 # 作用:记录年龄.手机号 # 定义: age = 18 # --> 内部操作 age = int(18) # int('sada') # 报错 in ...