Codeforce:Good Bye 2020 个人题解
题面链接:Here
代码提交:Here
年终彩蛋


1466A. Bovine Dilemma
题意是:给定一个固定点(0,1),然后给定n个在x轴的点,求面积不同的三角形个数
简单思考一下就容易发现这个是一个高相等的三角形,只需要去比较底边的长度不同的有多少个即可。
//AC代码
void solve() {
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; ++i)
cin >> v[i];
if (n == 1) {
cout << 0 << endl;
return;
}
set<int> s;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
if (i != j)
s.insert(v[j] - v[i]);
//由于直接暴力找的答案是正解的两倍(会存入等大小的负值),所以要除2
cout << s.size() / 2 << endl;
}
进阶挑战:Try to solve it for \(n,x_i≤10^5\).
//待补

1466B. Last minute enhancements
给定\(n\) 个音符的值,当可以为重复出现的值加一时,最终能有多少个不同音符
标记出现过的,如果下次还出现则令其加一再标记
//原提交写法
void solve() {
cin >> n;
vector<int> v(n);
int cnt = 0, sum = 0;
int book[2 * (n + 1)] = {0};
set<int> s;
for (int i = 0; i < n; ++i) {
cin >> v[i];
if (book[v[i]])
v[i]++;
s.insert(v[i]);
book[v[i]]++;
}
if (n == 1) {
cout << 1 << endl;
return;
}
cout << s.size() << endl;
}
//写法优化
void solve() {
ll n, x;
cin >> n;
set<ll> s;
for (int i = 0; i < n; ++i) {
cin >> x;
if (s.count(x))
x++;
s.insert(x);
}
cout << s.size() << endl;
}
//多利用STL函数帮助解决问题
进阶挑战:对于给定的 \(k_i\),如果我们可以将音符 \(x_i\) 增加 [0,\(k_i\)]中的任何整数,可以解决吗?
//待补

1466C. Canine poetry
如果存在一个长度大于3的回文,则存在一个长度为2或3的回文。此观察结果使我们可以简化擦除所有长度为2或3的回文的任务。 每个字符最多将被替换一次。
从现在开始,有几种可能的解决方案。 最简单的方法是从左到右遍历一个单词。 当我们遇到以当前位置结束的回文(长度为2或3),并且由未标记的元素组成时,我们会贪婪地将此字符标记为要替换的字符。 标记字符的数目就是答案,因为事实证明,通过仅替换标记位置上的字母,我们可以获得有效的无回文序列。 复杂度为O(n)。
当然这道题也可以用DP做,但更复杂:时间复杂度\(O(n*26^2)\)
char s[N];
bool vis[N];
void solve() {
cin >> (s + 1);
n = strlen(s + 1);
for (int i = 1; i <= n; i += 1)
vis[i] = 0;
int ans = 0;
for (int i = 1; i <= n; i += 1) {
if (i >= 2 and s[i] == s[i - 1] and not vis[i - 1]) {
vis[i] = 1;
ans += 1;
}
if (i >= 3 and s[i] == s[i - 2] and not vis[i - 2] and not vis[i]) {
vis[i] = 1;
ans += 1;
}
}
cout << ans << "\n";
}
进阶挑战:如果字母可以更改,并且每次更改后都需要计算结果怎么办?

1466D. 13th Labour of Heracles
树构造,写一下入度和出度
ll w[N];
int d[N];
void solve() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> w[i], d[i] = 0;
for (int i = 1, u, v; i < n; i++) {
cin >> u >> v;
d[u] += 1, d[v] += 1;
}
ll ans = 0;
vector<ll> v;
for (int i = 1; i <= n; i++) {
ans += w[i];
for (int j = 1; j < d[i]; j++)
v.push_back(w[i]);
}
sort(v.begin(), v.end(), greater<ll>());
cout << ans << " ";
for (ll x : v)
cout << (ans += x) << " ";
cout << endl;
}

1466E. Apollo versus Pan
//待补

1466F. Euclid's nightmare
//待补
Codeforce:Good Bye 2020 个人题解的更多相关文章
- Codeforces:Good Bye 2018(题解)
Good Bye 2018! 题目链接:https://codeforces.com/contest/1091 A. New Year and the Christmas Ornament 题意: 给 ...
- Good Bye 2017 部分题解
D. New Year and Arbitrary Arrangement 分析 \(dp[i][j]\) 表示已有 \(i\) 个 \(a\) 和 \(j\) 个 \(ab\) 的情况下继续构造能得 ...
- [题解][Codeforces]Good Bye 2019 简要题解
构造题好评,虽然这把崩了 原题解 A 题意 二人游戏,一个人有 \(k_1\) 张牌,另一个人 \(k_2\) 张,满足 \(2\le k_1+k_2=n\le 100\),每张牌上有一个数,保证所有 ...
- Grakn Forces 2020 ABCDE题解
看到老外评论区中说,这场的难度估计是\(div.1\)和\(div.1.5\)的合并 A. Circle Coloring #构造 题目链接 题意 给定三个长度为\(n\)数组\(a,b,c\),要你 ...
- JOI 2020 Final 题解
T1. 只不过是长的领带 大水题,把 \(a_i,b_i\) 从小到大排序. 发现最优方案只可能是大的 \(a_i\) 跟大的 \(b_i\) 匹配,小的 \(a_i\) 与小的 \(b_i\) 匹配 ...
- DISCO Presents Discovery Channel Code Contest 2020 Qual题解
传送门 \(A\) 咕咕 int x,y; int c[4]={0,300000,200000,100000}; int res; int main(){ cin>>x>>y; ...
- Codeforce 水题报告(2)
又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ...
- 【Nowcoder 上海五校赛】二数(模拟)
题目描述: 我们把十进制下每一位都是偶数的数字叫做“二数”. 小埃表示自己很聪明,最近他不仅能够从小数到大:2,3,4,5....,也学会了从大数到小:100,99,98...,他想知道从一个数开始数 ...
- 【Home Page】本博客使用指南
[关于] 坐标:ZJ.HZ.XJ. 高一现役 OIer,经常被吊打. Luogu:_Wallace_ [近期] 浙大 ICPC-ACM 2020 部分题解: 关键字「ZJU-ICPC Summer T ...
- Good Bye 2018题解
Good Bye 2018题解 题解 CF1091A [New Year and the Christmas Ornament] 打完cf都忘记写题解了qwq 题意就是:给你一些黄,蓝,红的球,满足蓝 ...
随机推荐
- ClickHouse(17)ClickHouse集成JDBC表引擎详细解析
目录 JDBC 建表 用法示例 JDBC表函数 资料分享 参考文章 JDBC 允许CH通过JDBC连接到外部数据库. 要实现JDBC连接,CH需要使用以后台进程运行的程序 clickhouse-jdb ...
- [ABC274Ex] XOR Sum of Arrays
section> Problem Statement For sequences $B=(B_1,B_2,\dots,B_M)$ and $C=(C_1,C_2,\dots,C_M)$, eac ...
- 【论文阅读】HTTP 流量和恶意 URL 的异常检测
Part 1关于论文 基本信息 题目:HTTP 流量和恶意 URL 的异常检测 源码:sec2vec源代码 摘要 在本文中,我们将展示如何利用自然语言处理(NLP)中已知 的方法来检测 HTTP 请求 ...
- Java中获取Class对象的三种方式
在Java中,我们经常需要获取某个类的Class对象,以便进行反射操作.动态加载类或者获取类的信息.本文将介绍Java中获取Class对象的三种常见方式. 1. 使用.class语法 获取Class对 ...
- LR(0)分析法
LR(0)是一种自底向上的语法分析方法.两个基本动作是移进和规约. 具体例子如下 已知文法G[E] (1) E→aА (2) E→bB (3) A→cА (4) A→d (5) B→cB (6) B→ ...
- linux内核initcall放置在各个section中函数执行流程
前言 linux以及嵌入式一些代码,我们看到core_initcall.device_initcall等等需要链接器分配各个section,并且在启动该模块时候执行.下面我们详细追溯一下执行过程. 作 ...
- 高版本jdk的访问私有成员属性的正确姿势
在jdk17+已经不能直接通过 setAccessible 来访问私有属性了 Field name = access.getClass().getDeclaredField("name&qu ...
- Java 中时间对象的序列化
在 Java 应用程序中,时间对象是使用地比较频繁的对象,比如,记录某一条数据的修改时间,用户的登录时间等应用场景.在传统的 Java 编程中,大部分的程序员都会选择使用 java.uti.Date ...
- super只能用在构造方法里面吗?
super关键字并不仅限于在构造方法中使用.在Java中,super关键字有两个主要的用途: 在子类的构造方法中调用父类的构造方法.这是super的一个常见用法,通常是在子类的构造方法的第一行使用,用 ...
- ElasticSearch-2
原文链接:https://gaoyubo.cn/blogs/cbe60a4d.html 一.DSL查询文档 1.1DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain S ...