Codeforces Round #636 (Div. 3)(2020.4.21)

A、Candies

因为题目保证了有解,所以我们枚举一下 k k k就行了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{int t; cin >> t;while (t--){ll n; cin >> n;ll sum = 4;while (n % (sum - 1) != 0)sum *= 2;cout << n / (sum - 1) << endl;}return 0;
}

B、Balanced Array

看起来有点吓人,其实也很好想。看样例就能看出来。

首先如果 n / 2 n/2 n/2是奇数肯定不成立。前面是偶数,后面是奇数,不相等。

如果 n / 2 n/2 n/2是偶数我们就尝试构造。偶数就 2 , 4 , 6 , 8 2,4,6,8 2,4,6,8这样输出,奇数就 1 , 3 , 5 , 7 1,3,5,7 1,3,5,7这样输出。然后在最后一个数把前面的差补全就好了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{int t; cin >> t;while (t--){int n; scanf("%d", &n);if (n / 2 % 2) printf("NO\n");else{printf("YES\n");for (int i = 1; i <= n / 2; ++i)printf("%d ", 2 * i);for (int i = 1; i <= n / 2 - 1; ++i)printf("%d ", 2 * i - 1);printf("%d\n", n / 2 * 3 - 1);}}return 0;
}

C、Alternating Subsequence

这题因为限制要找最长的,所以我们见到异号的就加就可以了。

如果同号的话更新一下最大值。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{int t; cin >> t;while (t--){int n; cin >> n;static ll a[200010];for (int i = 1; i <= n; ++i) scanf("%lld", &a[i]);vector <ll> sav; ll sum = a[1];sav.push_back(a[1]);for (int i = 2; i <= n; ++i){int size = sav.size();if (sav[size - 1] * a[i] > 0){if (sav[size - 1] < a[i]){sum = sum - sav[size - 1] + a[i];sav[size - 1] = a[i];}}else sav.push_back(a[i]), sum += a[i];}printf("%lld\n", sum);}return 0;
}

这场没想到的是D居然没出。思路在接近一个月前是接触过的,不过比赛没想到。明天会补。

不过这次因为前三题出得飞快居然上了70分。舒服了。

不过罚坐了一个半小时多

今天是个上分的好天气 真的

D、Constant Palindrome Sum(2020.4.23 补)

差分前缀和。比赛的时候想的是枚举 x x x,考虑这个 x x x有哪几种数对会对它有贡献。两个数都大于等于 x x x贡献为2,剩下的除非等于其它贡献都为1。不过这真的没办法写…

正解也是枚举 x x x,不过考虑的是每对数对 x x x的贡献。观察发现对于某对数 ( a , b ) (a,b) (a,b),修改其中某一个数的值最小能改成 m i n ( a , b ) + 1 min(a,b)+1 min(a,b)+1,最大能改成 m a x ( a , b ) + k max(a,b)+k max(a,b)+k。于是在这个区间里这对数的贡献为1。不过 a + b a+b a+b的贡献记得修改为0。

在这个区间之外的贡献都为2。然后我们就可以差分了。

对于在区间外的贡献我们考虑在 d i f [ 1 ] dif[1] dif[1]中加二。然后直接跑一遍前缀和,取个最小值。

(过几天也出道差分的题玩玩www)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 2e5 + 10;
const int INF = 0x3f3f3f3f;
int main()
{int t; cin >> t;while (t--){int n, k; scanf("%d%d", &n, &k);static int a[MAXN];for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);int dif[2 * MAXN] = {0};for (int i = 1; i <= n / 2; ++i){dif[1] += 2;dif[min(a[i], a[n - i + 1]) + 1]--;dif[max(a[i], a[n - i + 1]) + k + 1]++;dif[a[i] + a[n - i + 1]]--;dif[a[i] + a[n - i + 1] + 1]++;}int ans = INF;for (int i = 1; i <= 2 * k; ++i)dif[i] = dif[i - 1] + dif[i], ans = min(ans, dif[i]);cout << ans << endl;}return 0;
}

这题还有一点需要注意。 d i f dif dif数组这种需要初始化的如果空间够尽量不要开到static里。

对于大数组memset的时间消耗非!常!大!

之前听说fill_n跑得很快。不清楚是不是真的。

一开始开到static里+memset时间是982ms,差一点就超时了。

删掉memset之后直接降到545ms,快了接近一倍。

Codeforces Round #636 (Div. 3)相关推荐

  1. Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力

    传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 首先关注到rrr从[2,n][2,n][2,n]都出现一次,所以很明显最后一个位置只出现一次,但是这样倒着来不是很 ...

  2. Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs

    传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路: 怎么感觉每场div3div3div3都有一个巧妙的图论题. 首先如果只有两 ...

  3. Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分

    传送门 文章目录 题意: 思路: 题意: 思路: 首先有一个显然的性质就是每组操作最多不会超过两次. 很容易想到一个很暴力的思路,就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k] ...

  4. Codeforces Round #636 (Div. 3)部分题解

    链接:Codeforces Round #636 (Div. 3) A - Candies 题意:求出一个x满足x+2∗x+4∗x+⋯+2k−1∗x=n且k>1 思路:提出x得x∗(1+2+4+ ...

  5. Codeforces Round #636 (Div. 3) D.Constant Palindrome Sum

    Codeforces Round #636 (Div. 3) D.Constant Palindrome Sum 题目链接 You are given an array a consisting of ...

  6. Codeforces Round #636 (Div. 3) C.Alternating Subsequence

    Codeforces Round #636 (Div. 3) C.Alternating Subsequence 题目链接 Recall that the sequence b is a a subs ...

  7. Codeforces Round #636 (Div. 3)(ABC)

    A. Candies 水题,暴力即可 代码如下: #include<bits/stdc++.h> #define ll long long using namespace std;int ...

  8. Codeforces Round #636 (Div. 3) ——A. Candies 题解

    题目链接:https://codeforces.com/contest/1343/problem/A 签到题,for循环暴力枚举即可. 代码如下: #include <bits/stdc++.h ...

  9. Codeforces Round #636 (Div. 3)D. Constant Palindrome Sum

    传送门-链接 题意:输入一个n和k,第二行输入一个长度为n的数组a,且保证了n为一个偶数,数组a中的每一个元素都不大于k,你可以修改多次,使得a[i]+a[n-i+1]=x(x为某个确定的值),你需要 ...

最新文章

  1. hexdump——Linux系统的二进制文件查看工具
  2. 笔记-高项案例题-2019年上-人力资源管理
  3. 简单帐表插件开发示例分享
  4. 如何设置坐标原点值_氨气检测仪电化学原理及报警值如何设置
  5. 简约易收录的导航网站源码
  6. I/O Permission Bit Map in Task State Segment(TSS)
  7. oracle的一些学习
  8. Linux线程屏障,线程屏障(基于linuxthreads-2.3)
  9. 使用boost中的线程池
  10. AMPL-最短路选择问题
  11. 免费得了一套做自媒体教程,免费分享给大家
  12. VMware安装虚拟机出现STOP: 0x0000005d错误
  13. HDU 5713 状压dp
  14. 幸福的烦恼:显卡算力太高而pytorch版本太低不支持
  15. mysql increment参数_mysql auto_increment
  16. 调用API接口 获取和解析 京东按关键字搜索商品数据
  17. 何止VR,新闻业迎来五大新技术变革
  18. 知道ip求子网掩码,网络地址,广播地址
  19. 总投资1478亿!三星表示停止LCD 面板,转换为QD-OLED
  20. 直销系统模式开发流程详解

热门文章

  1. Kusama平行链即将开拍,谁将拔得头筹?
  2. 京东与腾讯续签三年战略合作协议;起薪涨至26万元!韩国三星SK争相加薪留住半导体人才;Firefox 102 发布|极客头条...
  3. 浏览器 WEB怎么实现大文件上传
  4. 【PHP】冒泡排序以及优化
  5. ado.net mysql 批量插入_[Dapper].NET/C#程序开发中使用Dapper批量插入数据集合的方法应该如何实现?...
  6. 社交电商未来的发展趋势是什么?
  7. windows安装tomcat
  8. android闪光灯参数,android6.0中的闪光灯
  9. 机器人复杂曲面打磨抛光主轴 全自动高精度打磨
  10. 那些年的java游戏_那些年我们曾为之痴迷的经典JAVA游戏(3)