比赛地址

A (水题)

题目链接

题目:

给出\(n\)个面板,每个面板初始时间相同,每过1s面板上数字会加1(数字在\(0\sim9\)循环播放),任意时刻选择一个面板\(x\)使他的时间停止,其他的面板\(y\)会在间隔\(|x-y|\)s以后停止,问从左到右顺序组成的数字序列所对应的十进制数最大值是多少?

解析:

只要最高位最大即可,因此首先需要最高位为9,那么次高位一定得是8,再次高位并不是7,因为可以在次高位为8时停止第二个面板构成989的序列

总结:

  • 当\(n=1\)时,只输出9
  • 当\(n\ne1\)时,输出\(98\)其余位模十加1即可
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int T;
  6. scanf("%d", &T);
  7. while (T--)
  8. {
  9. int n;
  10. scanf("%d", &n);
  11. if (n == 1)
  12. printf("9\n");
  13. else
  14. {
  15. printf("98");
  16. int t = 8;
  17. for (int i = 2; i < n; ++i)
  18. printf("%d", t = (t + 1) % 10);
  19. printf("\n");
  20. }
  21. }
  22. }

B (暴力)

题目链接

题目:

给出一个数组\(a\),可以改变一次数组中某一元素的值,问数列\(a\)中最小的极值点个数是多少?

解析:

  1. 对于改变任意一个数而言,能够影响到的极值点的情况也只有自己或者左右的两个数据,而为了减小极值点数量,必然是使\(a[i]=a[i-1]\mid a[i]=a[i+1]\)两种情况,
  2. 这样便可以对已经是极值点的数据进行操作,并且暴力检查两种情况下缩减极值点数目的最大值即可

注意:可以对端点值进行复制,避免在遍历过程中对端点进行特判

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 3e5 + 5;
  4. int dat[maxn];
  5. int cnt;
  6. bool check(int i)
  7. {
  8. return dat[i] > dat[i - 1] && dat[i] > dat[i + 1] || dat[i] < dat[i - 1] && dat[i] < dat[i + 1];
  9. }
  10. int main()
  11. {
  12. int T;
  13. scanf("%d", &T);
  14. while (T--)
  15. {
  16. cnt = 0;
  17. int n;
  18. scanf("%d", &n);
  19. for (int i = 1; i <= n; ++i)
  20. scanf("%d", &dat[i]);
  21. dat[0] = dat[1], dat[n + 1] = dat[n];
  22. int mx = 0;
  23. for (int i = 2; i < n; ++i)
  24. {
  25. if (check(i))
  26. {
  27. ++cnt;
  28. int t = dat[i], now = 0, aa = 0;
  29. for (int j = i - 1; j <= i + 1; ++j)
  30. now += check(j);
  31. dat[i] = dat[i - 1];
  32. for (int j = i - 1; j <= i + 1; ++j)
  33. aa += check(j);
  34. mx = max(mx, now - aa);
  35. aa = 0;
  36. dat[i] = dat[i + 1];
  37. for (int j = i - 1; j <= i + 1; ++j)
  38. aa += check(j);
  39. mx = max(mx, now - aa);
  40. dat[i] = t;
  41. }
  42. }
  43. printf("%d\n", cnt - mx);
  44. }
  45. }

C (贪心+思维)

题目链接

题目:

给出三个数列,每次可以从两个数列中分别挑出两个数 \(a,b\) 并从原数列中删去,并将\(a-b\)放进第一个数列,问最后剩余的一个数最大是多少(其余两个数列为空)?

解析:

两种贪心策略

  1. 每次选出某一个序列的最小值用这个最小值减去其他序列的”所有“(保留一个)值,再用保留值减去这个所选的序列中所有的值,最后剩余数的值=其他两个序列的值之和-2*选中序列的值
  2. 分别选出两个序列中的最小值分别用各自的最小值减去另一个序列的除最小值以外的其他值,未选中序列的“所有”(保留一个)值被两个最小值中任意一个减去都可以,然后再用保留值减去这两个最小值进行了若干次操作后的结果,最后剩余数的值=除两个选中最小值的和-选中的最小值的和

总结:

\[result=sum-2\times\min(sum_{array},min_{ai},min_{aj})
\]

注意:要开long long

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. LL mn[3] = { INF,INF,INF }, sum[3], t;
  4. LL n[3];
  5. int main()
  6. {
  7. scanf("%d%d%d", &n[0], &n[1], &n[2]);
  8. for (int i = 0; i < 3; ++i)
  9. {
  10. while (n[i]--)
  11. {
  12. scanf("%lld", &t);
  13. sum[i] += t;
  14. mn[i] = min(mn[i], t);
  15. }
  16. }
  17. printf("%lld", sum[0] + sum[1] + sum[2] - 2 * min({ mn[0] + mn[1],mn[1] + mn[2],mn[0] + mn[2],sum[0],sum[1],sum[2] }));
  18. }

Codeforces Round #695 (Div. 2)的更多相关文章

  1. Codeforces Round #695 (Div. 2) C. Three Bags (贪心,思维)

    题意:有三个背包,每个背包里都用一些数字,你可以选择某一个背包的数字\(a\),从另外一个背包拿出\(b\)(拿出之后就没有了),然后将\(a\)替换为\(a-b\),你可以进行任意次这样的操作,使得 ...

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

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

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

  4. Codeforces Round #368 (Div. 2)

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

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

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

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

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

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

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

  9. Codeforces Round #371 (Div. 1)

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

随机推荐

  1. 虚拟机(centos7)网络配置

    修改网络配置(ip等) VWware右上角,选择编辑---虚拟网络编辑器 可以看到子网ip是 192.168.1.0,那么我们分配ip地址就可以从此ip段开始. 再点击NAT设置 这里的网关我们稍后会 ...

  2. Thread interrupt() 线程中断的详细说明

    GitHub源码地址 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止 ...

  3. 在.Net中所有可序列化的类都被标记为_

    [Serializable] 这个叫Attribute写在类.属性.字段的上面,比如 [Serializable] class A { ... }

  4. Llbp2p是什么?

    这是个很好的问题.用一句话来概况就是libp2p是一个模块化的协议系统,它的规范和程序库可以用来开发p2p网络应用程序. 对等节点基础 对于我们对libp2p在上面的概要描述有很多内容需要进一步解释, ...

  5. kubernetes集群断电后etcd启动失败之etcd备份方案

    一.问题描述 二进制部署的单Master节点的v1.13.10版本的集群,etcd部署的是3.3.10版本,部署在master节点上.在异常断电后,kubernetes集群无法正常启动.这里通过查看k ...

  6. windows安装程序无法将windows配置为在此计算机上运行

    ----------------------------------------------- 解决办法: 当出现如上提示的时候,按下shift+f10 会打开命令窗口,进入到C:\windows\s ...

  7. Kruskal重构树——[NOI2018] 归程

    题目链接: UOJ LOJ 感觉 Kruskal 重构树比较简单,就不单独开学习笔记了. Statement 给定一个 \(n\) 点 \(m\) 边的无向连通图,用 \(l,a\) 描述一条边的长度 ...

  8. 通过Spring profile方式实现多环境部署

    1 多环境部署 在实际软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行.例如,各个环境数据库地址不同,需要单独配置.spring高级装备中提供profile,来支持多环境部署. 1.1 ...

  9. cocosCreator微信小游戏排行榜思路

    cocosCreator制作微信小游戏排行榜实现方案: 游戏认知:项目分为主域和子域,主域就是游戏主程部分,子域为单独处理微信排行榜公共域数据的. 游戏主域里创建一个节点,添加WXSubContext ...

  10. MySQL 锁(完整版)

    目录 锁总览 锁的作用 加锁流程 锁对数据库的影响 锁等待 死锁 锁类型 锁范围 锁方式 全局锁 全局读锁 全局QC锁 QC锁存在的问题: 备份锁 backup lock MDL锁 MDL锁类型 MD ...