T1 取餐号


看到数据范围 直接锁定埃氏筛和线性筛

我打的是一个优化一点的埃氏筛

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int MAX = 5*1e6+50;
LL p[MAX],tot,n,m;
bool vis[MAX];
void work_p(LL n) {
for(int i = 2; i <= n; i++) {
if(vis[i] == 0) {
p[++tot]=i;
}
for(int j = 1; j <= tot; j++) {
if(p[j] * i > n) break;
vis[p[j] * i] = 1;
}
}
}
int main() {
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
scanf("%lld%lld",&n,&m);
work_p(n);
cout<<tot<<" "<<p[m];
return 0;
}

时间复杂度 近似

O

n

l

o

g

n

O(n log n)

O(nlogn)
得分 100

T2 堆人塔



思路 : 首先根据题意 得到 过程 ,找到当前区间最大的一个值,将这个值编号,分成左右两个区间,在进行查找最大值。可以dfs查找区间,for循环枚举找到最大值,显然会被卡,可以通过ST表进行预处理,

O

(

1

)

O(1)

O(1) 得出最大值。考场忘记了ST表的板子 打了40分的暴力
AC代码

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int MAX = 1e5+30;
int n,a[MAX],ans[MAX],mx[110000][20];
bool bol1 = 1,bol2 = 1;//1—n,n-1;
bool vis[MAX];
void ST(){
for(int i=1;i<=n;i++)
mx[i][0]=i;
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i+(1<<j)<=n+1;i++){
if(a[mx[i][j - 1]] > a[ mx[i + (1 << (j - 1))] [j-1]])
mx[i][j] = mx[i][j - 1];
else
mx[i][j] = mx[i + ( 1 << (j - 1) )][j - 1];
}
}
void dfs(int l, int r, int c) {
// cout<<"*";
if(l < 1|| r > n) return ;
if(l > r) return ;
if(l == r) {
ans[l] = c;
return ;
}
int k=log2(r-l+1),ww;
int x = mx[l][k];
int y = mx[r - (1 << k) + 1][k];
if(a[x] > a[y]) ww = x;
else ww = y;
ans[ww] =c;
dfs(ww + 1, r, c+1);
dfs(l, ww-1, c+1);
}
int main() {
freopen("tower.in","r",stdin);
freopen("tower.out","w",stdout);
scanf("%d",&n);
for(int i = 1; i <= n ;i++)
scanf("%d",&a[i]);
ST();
dfs(1,n,0);// nlogn -> n!
for(int i = 1; i <= n; i++) {
if(i == 1) printf("%d",ans[i]);
else printf(" %d",ans[i]);
}
return 0;
}

T3


思路 :没有思路 暴力(还是一个错误的假暴力(哭))

正解

{

二分 中位数

O(n) 的将 大于 中位数 的 数 值 附上1

将 小于 中位数 的数值 附上-1

算出前缀和

如果存在一个区间满足 区间和 >= 0,则必定存在大于等于 当前mid 的值

返回 1;

否则返回 0

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int MAX = 1e5+60;
LL n, k, a[MAX], res = 0,sum[MAX];
bool check(LL mid) {
for(int i = 1; i <= n; i++) {
sum[i] = sum[i-1];
if(a[i] >= mid) sum[i]++;
else sum[i]--;
}
LL minn = 1e9;
for(int i = k+1; i <= n; i++) {
if(sum[i - k] < minn) minn = sum[i - k];
if(sum[i] - minn > 0) return 1;
}
return 0;
}
int main() {
freopen("plunder.in","r",stdin);
freopen("plunder.out","w",stdout);
scanf("%lld%lld", &n, &k);
for(int i = 1 ;i <= n; i++)
scanf("%lld",&a[i]);
LL l = 1, r = 1e9+1;
while(l + 1 < r) {
LL mid = (l + r) >> 1 ;
if(check(mid)) {
res = mid;
l = mid;
}
else r = mid;
}
cout<<res;
return 0;
}

}

T4 攻打恶魔之巅



思路 : dp,

f

[

i

]

[

j

]

f[i][j]

f[i][j]表示在第i个台阶还剩j个能量石的最小步数

f

[

i

+

k

]

[

j

]

=

m

i

n

(

f

[

i

+

k

]

[

j

]

,

f

[

i

]

[

j

]

+

1

)

f[i + k][j] = min(f[i+k][j] , f[i][j] +1 )

f[i+k][j]=min(f[i+k][j],f[i][j]+1)
如果有传送阵得到

f

[

t

[

i

]

]

[

j

1

]

=

m

i

n

(

f

[

t

[

i

]

]

[

j

1

]

,

f

[

i

]

[

j

]

)

f[t[i]][j-1]=min(f[t[i]][j-1],f[i][j])

f[t[i]][j−1]=min(f[t[i]][j−1],f[i][j])

正解:
但这个方程显然有后效性,即使用传送阵 后边的最小值可以修改前边的最小值
为了避免后效性 我们以 能量石作为状态 ,枚举往前走k距离,在枚举往后走k距离

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int MAX = 5*1e6+50,oo=1e9;
LL f[MAX][30],n,m,k,t[MAX],ans=1e9;//表示 在第i个楼梯 还剩 k 能量石 最小步数
int main()
{
freopen("step.in","r",stdin);
freopen("step.out","w",stdout);
scanf("%lld%lld%lld",&n,&m,&k);
for(int i = 1; i <= n ;i++)
scanf("%lld",&t[i]);
for(int i = 0; i <= n; i++)
for(int j = 0; j <= k; j++)
f[i][j] = oo;
f[1][k] = 0;
for(int j = k; j>= 0; j--) {
for(int i = 1; i <= n; i++) {
for(int mm = 1; mm <= m; mm++) {
if(mm + i > n) break;
f[mm+i][j]=min(f[mm+i][j],f[i][j] + 1);
}
if(j>=1)
f[t[i]][j-1] =min(f[t[i]][j-1],f[i][j]);
}
for(int i = n; i >= 1 ;i-- ){
for(int mm = 1; mm <= m; mm++) {
if(i <= mm) break;
f[i-mm][j] = min(f[i-mm][j],f[i][j] + 1);
}
if(j>=1)
f[t[i]][j-1] =min(f[t[i]][j-1],f[i][j]);
}
} for(int i = 0; i <= k ;i++) ans = min(ans,f[n][i]);
cout<<ans<<endl;
return 0;
}

T5

不会

得分 : 100+40+20+0+15=175
*

2022/07/16暑期集训考试 day1的更多相关文章

  1. 8.4 正睿暑期集训营 Day1

    目录 2018.8.4 正睿暑期集训营 Day1 A 数对子 B 逆序对 C 盖房子 考试代码 A B C 2018.8.4 正睿暑期集训营 Day1 时间:4.5h(实际) 期望得分:30+50+3 ...

  2. 8.9 正睿暑期集训营 Day6

    目录 2018.8.9 正睿暑期集训营 Day6 A 萌新拆塔(状压DP) B 奇迹暖暖 C 风花雪月(DP) 考试代码 A B C 2018.8.9 正睿暑期集训营 Day6 时间:2.5h(实际) ...

  3. 8.10 正睿暑期集训营 Day7

    目录 2018.8.10 正睿暑期集训营 Day7 总结 A 花园(思路) B 归来(Tarjan 拓扑) C 机场(凸函数 点分治) 考试代码 A B C 2018.8.10 正睿暑期集训营 Day ...

  4. 8.6 正睿暑期集训营 Day3

    目录 2018.8.6 正睿暑期集训营 Day3 A 亵渎(DP) B 绕口令(KMP) C 最远点(LCT) 考试代码 A B C 2018.8.6 正睿暑期集训营 Day3 时间:5h(实际) 期 ...

  5. 8.8 正睿暑期集训营 Day5

    目录 2018.8.8 正睿暑期集训营 Day5 总结 A 友谊巨轮(线段树 动态开点) B 璀璨光滑 C 构解巨树 考试代码 A B C 2018.8.8 正睿暑期集训营 Day5 时间:3.5h( ...

  6. 8.7 正睿暑期集训营 Day4

    目录 2018.8.7 正睿暑期集训营 Day4 A 世界杯(贪心) B 数组(线段树) C 淘汰赛 考试代码 A B C 2018.8.7 正睿暑期集训营 Day4 时间:5h(实际) 期望得分:. ...

  7. 8.5 正睿暑期集训营 Day2

    目录 2018.8.5 正睿暑期集训营 Day2 总结 A.占领地区(前缀和) B.配对(组合) C 导数卷积(NTT) 考试代码 T1 T2 T3 2018.8.5 正睿暑期集训营 Day2 时间: ...

  8. 7.30 正睿暑期集训营 A班训练赛

    目录 2018.7.30 正睿暑期集训营 A班训练赛 T1 A.蔡老板分果子(Hash) T2 B.蔡老板送外卖(并查集 最小生成树) T3 C.蔡老板学数学(DP NTT) 考试代码 T2 T3 2 ...

  9. 2014 SCAU_ACM 暑期集训

    暑期集训,希望能在这段时间获得对得起自己的提升吧 时间:7.11~8.30 集训各专题内容: 1.贪心,递推,基础DP(背包,区间DP,状态压缩DP(去年出了不少于2道铜牌题,看着办)) 2.搜索(B ...

  10. http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html

    http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html

随机推荐

  1. 利用Abp过滤器实现业务数据“回收站”功能

    @ 目录 原理 创建过滤器 使用过滤器 查询 删除 恢复 原理 回收站是当用户删除一条记录时,不是直接从数据库中删除,而是将其放入"回收站",以便用户可以在需要时恢复数据. 在Ab ...

  2. Nextcloud登录界面输入用户名和密码后报内部故障

    查询~/nextcloud/data/nextcloud.log,找到日志报出如下错误 "Something is wrong with your openssl setup: error: ...

  3. 抽象类 vs 接口【概念解析系列_2】【C# 基础】

    〇.前言 抽象类和接口的相似之处还是很多的,但是它们的侧重点不同,本文将简单梳理下. 一.简介与示例 1.1 抽象类 抽象类就是不能使用 new 方法进行实例化的类,即没有具体实例对象的类. 抽象类有 ...

  4. 代码随想录算法训练营第八天| LeetCode 344.反转字符串 541. 反转字符串II 151.翻转字符串里的单词

    344.反转字符串 卡哥建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数 题目链接/文章讲解/视频讲解:https: ...

  5. html5 3.0 表单

    表单的定义:多个输入框,以表格的形式展示 表单常用在网页登录和注册功能中 表单的元素属性:<input type="text"name="   "valu ...

  6. 红帽RHCE考题总结练习(8.0 ansible)

    本文是红帽RHCE考题的总结,个别题目写了多种步骤. 一.安装和配置ansible 题目: 按照下方所述,在控制节点 bastion.lab.example.com 上安装和配置 Ansible: 安 ...

  7. [ABC126F] XOR Matching

    2023-01-07 题目 题目传送门 翻译 翻译 难度&重要性(1~10):1 题目来源 AtCoder 题目算法 位运算 解题思路 因为两个相同数异或为 \(0\),所以中间放一个 \(k ...

  8. 【JMeter】使用BeanShell写入内容到文件

    使用BeanShell写入内容到文件 目录 使用BeanShell写入内容到文件 一.前言 二.提取 三.写入 一.前言 ​ 在我们日常工作中,可能会遇到需要将请求返回的数据写入到文件中.在我们使用J ...

  9. 《Web安全基础》01. 基础知识

    @ 目录 1:概念名词 1.1:域名 1.2:DNS 1.3:网站开发语言 1.4:后门 1.5:Web 1.6:Web 相关安全漏洞 2:数据包 2.1:HTTP 2.2:HTTPS 2.3:请求数 ...

  10. 怎么选择API接口来获取自己想要的数据

    在今天的数字时代,数据变得越来越重要,API接口也成为了获取数据的一种重要方式.无论是开发自己的应用程序还是进行市场营销,数据的获取都是非常必要的.但是,如何选择API接口来获取自己想要的数据呢? 以 ...