比赛地址

A (水题)

题目链接

题目:

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

解析:

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

总结:

  • 当\(n=1\)时,只输出9
  • 当\(n\ne1\)时,输出\(98\)其余位模十加1即可
#include<bits/stdc++.h>
using namespace std; int main()
{
int T;
scanf("%d", &T);
while (T--)
{
int n;
scanf("%d", &n);
if (n == 1)
printf("9\n");
else
{
printf("98");
int t = 8;
for (int i = 2; i < n; ++i)
printf("%d", t = (t + 1) % 10);
printf("\n");
}
}
}

B (暴力)

题目链接

题目:

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

解析:

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

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

#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5 + 5;
int dat[maxn];
int cnt; bool check(int i)
{
return dat[i] > dat[i - 1] && dat[i] > dat[i + 1] || dat[i] < dat[i - 1] && dat[i] < dat[i + 1];
} int main()
{
int T;
scanf("%d", &T);
while (T--)
{
cnt = 0;
int n;
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &dat[i]);
dat[0] = dat[1], dat[n + 1] = dat[n];
int mx = 0;
for (int i = 2; i < n; ++i)
{
if (check(i))
{
++cnt;
int t = dat[i], now = 0, aa = 0;
for (int j = i - 1; j <= i + 1; ++j)
now += check(j);
dat[i] = dat[i - 1];
for (int j = i - 1; j <= i + 1; ++j)
aa += check(j);
mx = max(mx, now - aa);
aa = 0;
dat[i] = dat[i + 1];
for (int j = i - 1; j <= i + 1; ++j)
aa += check(j);
mx = max(mx, now - aa);
dat[i] = t;
}
}
printf("%d\n", cnt - mx);
}
}

C (贪心+思维)

题目链接

题目:

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

解析:

两种贪心策略

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

总结:

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

注意:要开long long

#include<bits/stdc++.h>
using namespace std; LL mn[3] = { INF,INF,INF }, sum[3], t;
LL n[3]; int main()
{
scanf("%d%d%d", &n[0], &n[1], &n[2]);
for (int i = 0; i < 3; ++i)
{
while (n[i]--)
{
scanf("%lld", &t);
sum[i] += t;
mn[i] = min(mn[i], t);
}
}
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] }));
}

最新文章

  1. Spring MVC:在jsp中引入css
  2. wordpress 打开卡在1.gravatar.com
  3. 对于旅游业的手机app的分析
  4. Javascript正则表达式的初步学习
  5. wamp集成环境开启虚拟主机多站点功能
  6. WCF tcpTrace.exe配置
  7. 【转】edittext设置点击链接
  8. CSS skills: 5) jquery hover(over,out)
  9. android中的文件操作详解以及内部存储和外部存储(转载)
  10. oracle查询blob类型
  11. javaSE读取Properties文件的六种方法
  12. 转:Javascript的10个设计缺陷
  13. 整合初步______SH
  14. 如何在WDM中使用xp系统的DMA用来处理数据
  15. JQuery 选择某个td中第二个a标签 控制特殊样式
  16. jquery 第四章
  17. BZOJ3105-新Nim游戏
  18. SQL SERVER 查询哪些存储使用了该表
  19. C#概念总结(一)
  20. Postman接口调试神器

热门文章

  1. PyQt(Python+Qt)学习随笔:QAbstractItemView的SelectionBehavior属性
  2. Hbase API 多条件查询
  3. 如何实现 token 加密(来自github每日一题)
  4. MySQL日期和时间函数汇总
  5. Java中四舍五入
  6. EM 算法-对鸢尾花数据进行聚类
  7. windows 10 1909 无法启用 .NET Framework 解决
  8. vue第十三单元(指令的作用,指令的钩子函数)
  9. Java 从 Map 到 HashMap 的一步步实现
  10. python 简单逻辑回归实例