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]; ...
随机推荐
- C语言:正负数之间取模运算(转载)
如果 % 两边的操作数都为正数,则结果为正数或零:如果 % 两边的操作数都是负数,则结果为负数或零.C99 以前,并没有规定如果操作数中有一方为负数,模除的结果会是什么.C99 规定,如果 % 左边的 ...
- 网络IO-阻塞、非阻塞、IO复用、异步
网络socket输入操作分为两个阶段:等待网络数据到达和将到达内核的数据复制到应用进程缓冲区.对这两个阶段不同的处理方式将网络IO分为不同的模型:IO阻塞模型.非阻塞模型.多路复用和异步IO. 一 阻 ...
- MyBatis从入门到精通(七):MyBatis动态Sql之choose,where,set标签的用法
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解如何使用choose, ...
- 免费rar/zip解压缩工具BandZip
今天为大家推荐一款解压缩类软件--BandZip bandzip是我认为的最好用的解压缩软件,速度快没广告 能够秒杀其他的压缩类软件 下载地址 bandzip点我 1 BandZip简介 BandZi ...
- Java学习笔记之---面向对象
Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...
- RDIFramework.NET框架基于Quartz.Net实现任务调度详解及效果展示
在上一篇Quartz.Net实现作业定时调度详解,我们通过实例代码详细讲解与演示了基于Quartz.NET开发的详细方法.本篇我们主要讲述基于RDIFramework.NET框架整合Quartz.NE ...
- ZIP:ZipEntry
ZipEntry: /* 此类用于表示 ZIP 文件条目. */ ZipEntry(String name) :使用指定名称创建新的 ZIP 条目. ZipEntry(ZipEntry e) :使用从 ...
- re模块:模式匹配与正则表达式
一.用正则表达式查找文本模式 正则表达式,简称regex,是文本模式的描述方法.比如\d是一个正则表达式,用于表示一位0~9的数字.在一个模式后面加上花括号包围的数字n(如{n}),表示匹配这个模式n ...
- python3.5学习笔记(第六章)
本章内容: 正则表达式详解(re模块) 1.不使用正则表达式来查找文本的内容 要求从一个字符串中查找电话号码,并判断是否匹配制定的模式,如:555-555-5555.传统的查找方法如下: def is ...
- sudo ln -sf libhiredis.so.0.10 libhiredis.so.0
which ldconfig sudo ln -sf libhiredis.so.0.10 libhiredis.so.0