比赛链接: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)的更多相关文章

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

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

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

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

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

随机推荐

  1. 切换用户后whoami打印用户的问题

    问题: 为何第二个whoami打印的还是root? root@localhost /]# [root@localhost /]# [root@localhost /]# more test.sh #! ...

  2. WebSocket协议中文版

    WebSocket协议中文版 摘要 WebSocket协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信.用于这个安全模型是通常由web浏览器使用 ...

  3. 【Linux】dlopen failed: /lib/lsiRAID.so: cannot open shared object file: No such file or directory

    遇到这个问题,首先第一反应,是看其他的服务器中是否有这个库文件,如果有的话直接cp过来一份就行 但是检查发现,其他的系统中也不存在lsiRAID.so这个库文件,很神奇.. 但是看日志持续报错,查看s ...

  4. leetcode 470. 用 Rand7() 实现 Rand10() (数学,优化策略)

    题目链接 https://leetcode-cn.com/problems/implement-rand10-using-rand7/ 题意: 给定一个rand7()的生成器,求解如何产生一个rand ...

  5. LeetCode559.N 叉树的最大深度

    题目 法一.层序遍历 1 class Solution { 2 public: 3 int maxDepth(Node* root) { 4 if(root== NULL) return 0; 5 q ...

  6. 使用NIM Server网络半自动安装AIX系统

    一.NIM配置 1.安装NIMServer前准备 1.1.配置IP地址 # ifconfig –a #检查当前IP地址# # smitty mktcpip #设置IP地址# 选择第一块网卡(插网线的网 ...

  7. kafka(二)基本使用

    一.Kafka线上集群部署方案 既然是集群,那必然就要有多个Kafka节点机器,因为只有单台机器构成的kafka伪集群只能用于日常测试之用,根本无法满足实际的线上生产需求. 操作系统: kafka由S ...

  8. Spring Aop中四个重要概念,切点,切面,连接点,通知

    1. 通知: 就是我们编写的希望Aop时执行的那个方法.我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行.2. 切点:切点就是我们配置的满足我们条件的目标方法.比如我们规定:名字前 ...

  9. [Noip模拟题]Seq

    题目描述 由于hyf长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载.有一群MM排队看hyf.每个MM都有自己独特的风格,由于hyf有着一颗包容的心,所以,什么风格的MM他都喜欢-- ...

  10. 1.2V升5V电源芯片,1.2V升3V的IC电路图方案

    镍氢电池就是典型的1.2V供电电源了,但是1.2V电压太低,需要电源芯片来1.2V升5V输出,或1.2V升3V输出稳压,1.2V单独难给其他芯片或者模块供电,即使串联1.2V*2=2.4V,也是因为电 ...