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. EC600U-4G模组,连接阿里云测试服务器和物联网平台

    原博主视频:https://www.bilibili.com/video/BV1yT4y1P7Gw?share_source=copy_web 连接阿里云服务器 !!需要公网ip(服务器)才能远程,不 ...

  2. Centos查看挂载目录并挂载

    一.概述 本次已Centos7作为示例 挂载系统没有挂载的磁盘,可以分如下几步 1.查看系统哪些盘未挂载 2.给未挂载的磁盘进行分区 3.格式化磁盘并向磁盘中写入系统文件 4.挂载磁盘 5.设置开机自 ...

  3. Python将大的csv文件拆分多个小的csv文件

    #ecoding=utf-8 import os import time # 2019/9/8 将大的csv文件拆分多个小的csv文件 def mkSubFile(lines, head, srcNa ...

  4. 超越.NET极限:我打造的高精度数值计算库

    超越.NET极限:我打造的高精度数值计算库 还记得那一天,我大学刚毕业,紧张又兴奋地走进人生第一场.NET工作面试.我还清楚地记得那个房间的气氛,空调呼呼地吹着,面试官的表情严肃而深沉.我们进行了一番 ...

  5. linux下的venv使用

    首先安装该模块: sudo apt-get install python3-venv 之后创建用于存储工程的文件夹 mkdir [filename] 创建环境: python3 -m venv ven ...

  6. 《深入理解Java虚拟机》读书笔记:HotSpot虚拟机对象探秘

    基于实用优先的原则,以常用的虚拟机HotSpot和常用的内存区域Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程.以下是本节内容的脑图. HotSpot虚拟机对象 ...

  7. react中使用动画 react-transition-group

    在React中通过react-transition-group使用过渡.动画,首先要有CSS3中的过渡和动画的相关知识储备,可以参考 过渡和2D变换.动画和3d变换. 我们自己通过css设置过渡.动画 ...

  8. 使用wrk对api接口进行性能测试

    安装 yum install -y openssl git git clone https://github.com/wg/wrk.git wrk cd wrk make cp wrk /usr/lo ...

  9. 园子的脱困努力-云厂商合作:领取阿里云免费ECS试用资源,部署Java Web环境,送小礼品

    在园子脱困的关键时期,每一笔收入都很重要,一边在会员救园,一边我们要努力把握每一个商务合作机会,争取早日走出困境. 之前园子维持生存的收入主要来自于与云厂商的合作,但去年由于云厂商推广策略的调整,这块 ...

  10. QA|4个数据打开了4个页面,怎么实现只打开一个页面?单例模式|网页计算器自动化测试实战

    如下图,代码中4个数据,产生了4个页面,怎么实现只打开一个页面?可使用单例模式 查询得知 单例模式实现有5种方法,参照链接下: https://blog.csdn.net/SixStar_FL/art ...