Codeforces Round #636 (Div. 3)
比赛链接:https://codeforces.com/contest/1343
A - Candies
题意
有一数列 x + 2x + 4x + ... + 2k-1x = n,输出 k ≥ 2 时任一满足该等式的一个 x 值。
思路
等比数列求和得 (2k-1) x = n,枚举 k 即可。
代码
#include <bits/stdc++.h>
using namespace std; void solve() {
int n; cin >> n;
for (int i = 2; i < 32; i++) {
if (n % ((1 << i) - 1) == 0) {
cout << n / ((1 << i) - 1) << "\n";
return;
}
}
} int main() {
int t; cin >> t;
while (t--) solve();
}
B - Balanced Array
题意
构造一个数组,要求满足:
- 前一半为偶数,后一半为奇数
- 所有数两两不同且都为正整数
- 前一半的数之和与后一半的数之和相等
思路
贪心,从 2 起构造前一半,从 1 起构造后一半,后一半最后一个元素特别构造。
代码
#include <bits/stdc++.h>
using namespace std; void solve() {
int n; cin >> n;
n /= 2;
if (n & 1) cout << "NO" << "\n";
else {
cout << "YES" << "\n";
for (int i = 1; i <= n; i++) {
cout << 2 * i << ' ';
}
for (int i = 1; i <= n - 1; i++) {
cout << 2 * i - 1 << ' ';
}
cout << 3 * n - 1 << "\n";
}
} int main() {
int t; cin >> t;
while (t--) solve();
}
C - Alternating Subsequence
题意
在一个数组中寻找一个正负相间的最长的子序列,且该子序列元素之和为该长度所有子序列的最大值。
思路
长度优先——贪心地取所有不同正负的元素
最大和——同正负的元素利用双指针局部排序,每次取最大值
代码
#include <bits/stdc++.h>
using ll = long long;
using namespace std; void solve() {
int n; cin >> n;
ll a[n]; for (ll &i : a) cin >> i;
ll ans = 0;
for (int i = 0; i < n; ) {
int j = i + 1;
while (j < n and a[i] * a[j] > 0) ++j;
sort(a + i, a + j);
ans += a[j - 1];
i = j;
}
cout << ans << "\n";
} int main() {
int t; cin >> t;
while (t--) solve();
}
D - Constant Palindrome Sum
题意
对一个长度为偶数,元素大小在 [1, k] 之间的数组元素做变换,每次可以用 [1, k] 间的一个数替换一个元素,要求最终满足,所有的 a[i] + a[n - 1 - i] 相等 (0-indexed),求最少需要的变换次数。
思路
a[i] + a[n - 1 - i] 的范围为 [2, 2 * k],我们可以假设每个和一开始都需要变换所有元素,然后计算每个对称和所能变换的最小值和最大值,在此区间内的和只需变换两个元素中的一个,为了在线性时间内访问所有需要减一的区间,可以用一个差分数组记录每个需要变换区间的左右端点,最后对于初始时的和因为两个子元素都不用变换所以需要再减一。
代码
#include <bits/stdc++.h>
using namespace std; const int M = 4e5 + 100;
int n, k;
int a[M], cnt[M], sub[M]; void solve() {
cin >> n >> k;
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 2; i <= 2 * k; i++) cnt[i] = n, sub[i] = 0;
for (int i = 0; i < n / 2; i++) {
int x = a[i], y = a[n - 1 - i];
int mi = min(x, y) + 1;
int mx = max(x, y) + k;
--cnt[x + y];
--sub[mi];
++sub[mx + 1];
}
for (int i = 2; i <= 2 * k; i++) {
sub[i] += sub[i - 1];
cnt[i] += sub[i];
}
int ans = INT_MAX;
for (int i = 2; i <= 2 * k; i++)
ans = min(ans, cnt[i]);
cout << ans << "\n";
} int main() {
int t; cin >> t;
while (t--) solve();
}
Codeforces Round #636 (Div. 3)的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
随机推荐
- laravel邮件发送
laravel邮件发送 使用邮件发送类Mail 文本 静态方法 raw() 富文本 静态方法 send() 注:使用邮件发送必须有邮件账号,需要开启smtp协议,现在主流服务器都支持,smtp默认端口 ...
- JavaCV更新到1.5.x版本后的依赖问题说明以及如何精简依赖包大小
javaCV全系列文章汇总整理 javacv教程文档手册开发指南汇总篇 前言 JavaCV更新到1.5.x版本,依赖包也迎来了很大变化,体积也变大了不少.很多小伙伴们反馈,之前很多1.3.x和1.4. ...
- ThinkPHP5表单令牌刷新
制作登录页面的时候,加入了表单令牌,账号和密码输入错误后,再登录的话,会提示表单令牌错误, 这是因为旧的令牌已经过期了,我们要处理下前端的token,修复的办法,在路由文件下加入 //刷新表单令牌,然 ...
- 浅谈Go中的time.After
go的一条哲学是 不要通过共享来实现通信,而是通信来实现共享 多协程之间通过 channel 来实现通信,而普遍会遇到的问题是,如何进行超时控制,资料一查询,需要配置select和time.After ...
- 【Linux】Centos7 安装redis最新稳定版及问题解决
------------------------------------------------------------------------------------------------- | ...
- scrapy框架的中间件
中间件的使用 作用:拦截所有的请求和响应 拦截请求:process_request拦截正常的请求,process_exception拦截异常的请求 篡改请求的头信息 def process_reque ...
- Python干货:了解元组与列表的使用和区别
元组是 Python 对象的集合,跟列表十分相似.下面进行简单的对比. 列表与元组 1.python中的列表list是变量,而元组tuple是常量. 列表:是使用方括号[],元组:则是使用圆括号() ...
- IDEA SSM后端框架入门
SSM框架 如果对SSM一无所知,推荐先去看这本书,可以在微信读书上看. 知识点 控制器返回对象时,对象需要有getter,setter方法,才能自动转化为json数据类型. 一个服务管理者对应多个业 ...
- 配置完xadmin源码包后启动报错“ Apps aren't loaded yet.”
raise AppRegistryNotReady("Apps aren't loaded yet.") django.core.exceptions. 碰到这种情况就要查看下是否 ...
- 小步前进之WebService
WebService Web Service 什么是Web Service? 为什么使用Web Service XML 什么是XML? 为什么使用XML? SOAP(Simple Object Acc ...