传送门

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的更多相关文章

  1. Codeforces Round #527 (Div. 3) ABCDEF题解

    Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...

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

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

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

  5. Codeforces Round #527 (Div. 3) C. Prefixes and Suffixes

    题目链接 题意:给你一个长度n,还有2*n-2个字符串,长度相同的字符串一个数前缀一个是后缀,让你把每个串标一下是前缀还是后缀,输出任意解即可. 思路;因为不知道前缀还是后缀所以只能搜,但可以肯定的是 ...

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

  7. Codeforces Round #527 (Div. 3)

    一场div3... 由于不计rating,所以打的比较浪,zhy直接开了个小号来掉分,于是他AK做出来了许多神仙题,但是在每一个程序里都是这么写的: 但是..sbzhy每题交了两次,第一遍都是对的,结 ...

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

  9. Codeforces Round #527 (Div. 3)C(多重集,STRING)

    #include<bits/stdc++.h>using namespace std;const int maxn=1e6+7;pair<string,int>p[maxn]; ...

随机推荐

  1. 使用new新建动态二维数组(多注意)

    #include<iostream> using namespace std; int main() { //设想要建立一个rows行,cols列的矩阵 //使用new进行新建 int r ...

  2. python多线程爬取图片实例

    今天试着把前面那个爬取图片的爬虫改成了多线程爬取,虽然最后可以爬取存储图片了,但仍存在一些问题.网址还是那个网址https://www.quanjing.com/category/1286521/1. ...

  3. [apue] 多进程管道读写的一些疑问

    对于一对一的pipe: 1) 写进程关闭写管道后,读进程继续读管道会导致read返回0: 2) 读进程关闭读管道后,写进程继续写管道会激发SIGPIPE信号,若捕获,则write返回-1: 而对于多对 ...

  4. Python入门基础(2)

    如果你是博客园团队,,看到不符合您们要求的地方可否指出来?不要你不符合要求,然后我不符合哪项要求?是要我自己去找么? python条件语句 首先介绍的是if语句,python中的if语句格式如下: i ...

  5. Nginx运行报错unknown directive ""

    使用文本编辑器把编码格式修改为UTF-8即可. 推荐文本编辑器:notepad++,自行百度搜索即可下载

  6. windows软件卸载工具Geek Uninstaller免安装版

    曾经一个问题一直困扰这我,就是每次在卸载软件的时候都卸载不干净,卸载完后会有遗留文件夹,每次都要手动删,还有注册表也不干净,让我很是难受,直到有一天发现了一个卸载神器Geek Uninstaller ...

  7. Linux使用httpd配置反代理

    Linux安装httpd请看上一篇:https://www.cnblogs.com/tuituji27/p/11189095.html 首先,httpd默认监听端口号是80,增加或修改代理的端口号的文 ...

  8. mysql 免安装版本 与问题记录

    将文件解压到D盘, 创建 my.ini 配置文件, ------------------复制进去--------------------- [client] port=3306 default-cha ...

  9. Spring Boot + Elasticsearch实现大批量数据集下中文的精确匹配-案例剖析

    缘由 数据存储在MYSQ库中,数据基本维持不变,但数据量又较大(几千万)放在MYSQL中查询效率上较慢,寻求一种简单有效的方式提高查询效率,MYSQL并不擅长大规模数据量下的数据查询. 技术方案 考虑 ...

  10. linux_硬链接和软链接区别

    硬链接有点类似于复制的概念.    ln 源文件 目的文件    ln不加-s,则默认是硬链接.例如,ln script script-hard,ls命令显示,script*显示硬链接有两个.我任意删 ...