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. 手写raft(一) 实现leader选举

    1. 一致性算法介绍 1.1 一致性同步与Paxos算法 对可靠性有很高要求的系统,通常都会额外部署1至多个机器为备用副本组成主备集群,避免出现单点故障. 有状态的系统需要主节点与备用副本间以某种方式 ...

  2. C语言链表实现(郝斌数链表学习笔记)

    #include "stdafx.h" #include<stdio.h> #include<stdlib.h> typedef struct Node { ...

  3. 2021-7-12 VUE的生命周期

    挂载: beforeCreate created beforeMount mounted:el挂载到实例上时运行 更新: beforeUpdate updated 销毁: beforeDestory ...

  4. Vue Cli起别名

    vue cli 3的写法 module.exports = { configureWebpack: { resolve:{ extensions:[], alias:{ 'assets':'@/ass ...

  5. 绕过PHP执行命令的函数执行系统cmd命令

    <?php $evil=`set`; echo '<pre>'.$evil.'</pre>'; ?> 成功执行set命令,你懂的! 顺手写了个php执行cmd命令的 ...

  6. centos7离线安装harbor

    前言 harbor是一个docker私有仓库,基于docker官方的registry,提供GUI.权限控制.项目管理等功能. 安装harbor前,需要先安装docker和docker-compose ...

  7. 如何找到docker容器中的网卡外联的veth pair的另一张网卡

    1.概述 在Docker容器中,每个容器都有一个或多个网络接口(网卡),用于连接容器内部与宿主机或其他容器进行通信.这些网络接口中的一些可能是veth pair,也就是虚拟以太网对,它们以成对的方式存 ...

  8. 4、Mybatis核心配置文件详解

    4.1.environments <!-- environments标签:配置多个连接数据库的环境 default属性:设置默认使用的环境的id --> <environments ...

  9. uni-app+h5puls 编写相机拍照

    <template> <view class="camera-page"> <image :src="imgSrc" v-if=& ...

  10. shopee商品详情接口的应用

    Shopee是东南亚和台湾地区最大的电子商务平台之一,成立于2015年,目前覆盖6个国家和地区.作为一家新兴电商平台,Shopee拥有快速增长的销售额和庞大的用户群体,为开发者提供了丰富的商业机会.其 ...