Codeforces Round #572 (Div. 2)
比赛链接:Codeforces Round #572 (Div. 2)
官方题解:Editorial of Codeforces Round #572
A. Keanu Reeves
题意
如果一个 \(01\) 序列中 \(0\) 的数量和 \(1\) 的数量不同,就认为这个序列是“好”的。
给定一个长度为 \(n\) 的 \(01\) 序列,将这个序列分割成多个“好”的序列,求最少分割次数和分割后的所有序列。
思路
如果原序列 \(0\) 和 \(1\) 不同就不用分割。
否则分割成两个串,第一串为第一个数,剩下的为第二串。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
const int maxn = 100000 + 5;
string s;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
cin >> s;
if(n % 2) {
cout << 1 << endl;
cout << s << endl;
return 0;
}
int one = 0;
for(int i = 0; i < n; ++i) {
if(s[i] == '1') ++one;
}
if(one * 2 != n) {
cout << 1 << endl;
cout << s << endl;
} else {
cout << 2 << endl;
cout << s.substr(0, n - 1) << " " << s[n - 1] << endl;
}
return 0;
}
B. Number Circle
题意
给定 \(n\) 个数字,将所有数字构成一个环,放置顺序任意,问是否存在一种放置顺序,使得每个数字小于左右两个数字的和。
思路
对所有数字排序,如果 \(a_n \ge a_{n - 1} + a_{n - 2}\),那么答案是 \(NO\),因为这样 \(a_n\) 大于等于任意两个数的和。
否则答案一定存在,只要交换最后两个数即可,因为 \(a_i < a_{i + 1} < a_{i - 1} + a_{i + 1}\ (i < n)\) 。(构造方法不唯一)
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 10;
int a[maxn];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for(int i = 0; i < n; ++i) {
cin >> a[i];
}
sort(a, a + n);
if(a[n - 1] >= a[n - 2] + a[n - 3]) {
cout << "NO" << endl;
} else {
cout << "YES" << endl;
swap(a[n - 1], a[n - 2]);
for(int i = 0; i < n; ++i) {
cout << a[i] << " ";
}
cout << endl;
}
return 0;
}
C. Candies!
题意
定义 \(f([a_1, a_2, \ldots, a_{2^k}])\) 为每次取两个相邻的数 \(a_i\) 和 \(a_{i + 1}\),将这两个数变成一个数 \((a_i + a_{i + 1})\ mod\ 10\),经过若干次同样操作直到序列长度为 \(1\) 为止。其中每次操作时如果 \(a_i + a_{i + 1} \ge 10\) 就能获得一颗糖果。
现在给定一个长度为 \(n\) 的序列 \(s\),以及 \(q\) 个询问。每个询问包含 \(l\) 和 \(r\),求 \(f([s_{l}, s_{l + 1}, \ldots, s_{r}])\)。
思路
每次合并是相加取模,所以每次序列都不会超过 \(10\),\(f([a_1, a_2, \ldots, a_{2^k}]) = \lfloor \frac{a_1 + a_2 + \ldots + a_{2^k}}{10} \rfloor\)。
用前缀和处理即可。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + 5;
int s[maxn];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for(int i = 1; i <= n; ++i) {
cin >> s[i];
s[i] += s[i - 1];
}
int q;
cin >> q;
for(int i = 0; i < q; ++i) {
int l, r;
cin >> l >> r;
cout << (s[r] - s[l - 1]) / 10 << endl;
}
return 0;
}
D1. Add on a Tree
题意
给定一颗树,初始每条边的权值为 \(0\)。可以任选两个叶子结点,给这两个结点的简单路径的所有边加上任意实数,问是否可以通过有限次操作使得树上的所有边达到任意值。
思路
如果有度为 \(2\) 的结点就不能。因为度为 \(2\) 的结点的两条边经过任意次操作后权值都相等。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 100000 + 5;
int degree[maxn];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for(int i = 0; i < n - 1; ++i) {
int u, v;
cin >> u >> v;
degree[u]++; degree[v]++;
}
for(int i = 1; i <= n; ++i) {
if(degree[i] == 2) {
cout << "NO" << endl;
return 0;
}
}
cout << "YES" << endl;
return 0;
}
D2. Add on a Tree: Revolution
待补
E.Count Pairs
题意
给定 \(n\) 个数 \(a_1, a_2, ..., a_n\) ,求满足 \((a_i+a_j)(a_i^2+a_j^2)\equiv k\ mod\ p\) 的 \((i, j)(1 \le i < j \le n)\) 的数量。其中 \(p\) 是素数,且 \(n\) 个数都不同。
思路
\[(a_i+a_j)(a_i^2+a_j^2)\equiv k\ mod\ p\]
\[(a_i-a_j)(a_i+a_j)(a_i^2+a_j^2)\equiv (a_i-a_j)k\ mod\ p\]
\[(a_i^2-a_j^2)(a_i^2+a_j^2)\equiv (a_i-a_j)k\ mod\ p\]
\[(a_i^4-a_j^4)\equiv (a_i-a_j)k\ mod\ p\]
\[a_i^4-ka_i\equiv a_j^4-ka_j\ (mod\ p)\]
统计一下有多少对 \((a_i^4-ka_i)\ mod\ p\) 是相同的。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
const int maxn = 3e5 + 5;
ll a[maxn];
ll qmod(ll a, ll b, ll m) {
if(!b) return 1 % m;
ll ans = 1;
while(b) {
if(b & 1) ans = (ans * a) % m;
a = (a * a) % m;
b >>= 1;
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
ll p, k;
cin >> n >> p >> k;
map<ll, int> b;
for(int i = 0; i < n; ++i) {
cin >> a[i];
ll tmp = (qmod(a[i], 4, p) - k * a[i]);
tmp += p * (abs(tmp) / p + 1);
b[tmp % p]++;
// cout << tmp << endl;
}
ll sum = 0;
for(auto it = b.begin(); it != b.end(); ++it) {
if(it->second > 1) sum += (it->second) * (it->second - 1) / 2;
}
cout << sum << endl;
return 0;
}
F.Array Beauty
待补
原文地址:https://www.cnblogs.com/wulitaotao/p/11440527.html
- 三星KNOX远程静默安装漏洞深入分析报告
- 技术分享:MSSQL注入xp_cmdshell
- 通过5个简单序列预测实例学习LSTM递归神经网络
- Google发现Windows 8.1 0day漏洞并公布漏洞验证程序(PoC)
- 携程React Native实践
- 数据分析告诉你:Php最不安全,Nginx比Apache安全
- 用python抓取摩拜单车API数据并做可视化分析(源码)
- 用Pandas在Python中可视化机器学习数据
- Intent 属性详解(下)
- 把复杂json解析成javabean思路:思路:
- Python数据科学计算库的安装和numpy简单
- 4G安全:研究人员发现攻击4G无线上网卡和SIM卡的方法
- Python文学化编程 - Jupyter notebook使用和插件拓展
- PoisonCake(毒蛋糕):内置于手机ROM的恶意代码模块
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 从今天起构建你的JavaScript世界
- SpringCloud开发框架入门知识
- 一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms?
- Codeforces Round #624 (Div. 3) A - Add Odd or Subtract Even
- XMLHttpRequest
- Codeforces Round #624 (Div. 3) B - WeirdSort
- 详解 Ajax
- 这个腾讯博客是被腾讯爬虫爬过来的,样式丑,请看我博客园地址,见下文
- Codeforces Round #624 (Div. 3) C - Perform the Combo
- 都是微服务的天下了,还有不知道 JSON 的程序员吗?
- Codeforces Round #624 (Div. 3) D.Three Integers
- select 高级查询之连接查询
- select 高级查询之子查询
- Java 最实用的文件读写
- MySQL基本操作