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. 懒人的百宝箱「GitHub 热点速览」

    本周 GitHub Trending 除了 lazydocker 之外,还有多个 lazy 项目上线,比如大家熟悉的 lazyvim,可见,这个世界对懒人还是很友好的.除此之外,主打一个密码免输入,绕 ...

  2. Python数据可视化-折线图

    Python数据可视化-折线图 一.JSON数据格式 1.1 什么是json JSON是一种轻量级的数据交互格式.可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 ...

  3. LCD与OLED的相爱相杀

    目前市面的显示技术主要分为LCD与OLED. 本文主要记录对LCD与OLED的学习. 导言:介绍一些专业名词和术语. 像素点:是指在由一个数字序列表示的图像中的一个最小单位,称为像素. 一张图片在显示 ...

  4. 深入浅出 Typescript

    TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准(ES6 教程). TypeScript 由微软开发的自由和开源的编程语言. TypeScript 设计 ...

  5. Spring Boot 启动流程追踪(第一篇)

    1.初始化 SpringApplication public SpringApplication(ResourceLoader resourceLoader, Class<?>... pr ...

  6. 国标GB28181视频平台EasyGBS视频监控平台无法播放,抓包返回ICMP排查过程

    国标GB28181视频平台EasyGBS是基于国标GB/T28181协议的行业内安防视频流媒体能力平台,可实现的视频功能包括:实时监控直播.录像.检索与回看.语音对讲.云存储.告警.平台级联等功能.国 ...

  7. P3874 砍树 题解

    前置 树形 dp,二分. 题意 本质上是一个树上背包,需要选不少于 \(k\) 个物品,每个物品有一个重量 \(w\) 和价值 \(v\),求性价比最大值. 分析 既然是性价比,显然是分数规划. 先介 ...

  8. 【译】通过 GitHub Copilot Chat 简化代码优化和调试(AI 辅助编程)

    今年3月,我们宣布了 Visual Studio 2022 的 GitHub Copilot Chat.通过 Chat, Copilot 已经超越了代码补全,提供了对代码工作原理的深入分析和解释.它支 ...

  9. 快手商品详情API接口如何使用

    使用快手开的API接口获取商品详情,可按照以下步骤进行: 1.注册账号并创建应用 注册开发者账号,并在账号后台中创建一个应用,获得AppKey和AppSecret等信息.这些信息是使用API接口访问快 ...

  10. linux shell根据关键字用sed注释掉整行

    一.将带有ab的行注释掉 # cat test # sed -i '/ab/s/^\(.*\)$/#\1/g' test ab是关键字 s是语法替换 ^是行首 $是行尾 \是转义符 数字1带表前述匹配 ...