2022/07/16暑期集训考试 day1
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的更多相关文章
- 8.4 正睿暑期集训营 Day1
目录 2018.8.4 正睿暑期集训营 Day1 A 数对子 B 逆序对 C 盖房子 考试代码 A B C 2018.8.4 正睿暑期集训营 Day1 时间:4.5h(实际) 期望得分:30+50+3 ...
- 8.9 正睿暑期集训营 Day6
目录 2018.8.9 正睿暑期集训营 Day6 A 萌新拆塔(状压DP) B 奇迹暖暖 C 风花雪月(DP) 考试代码 A B C 2018.8.9 正睿暑期集训营 Day6 时间:2.5h(实际) ...
- 8.10 正睿暑期集训营 Day7
目录 2018.8.10 正睿暑期集训营 Day7 总结 A 花园(思路) B 归来(Tarjan 拓扑) C 机场(凸函数 点分治) 考试代码 A B C 2018.8.10 正睿暑期集训营 Day ...
- 8.6 正睿暑期集训营 Day3
目录 2018.8.6 正睿暑期集训营 Day3 A 亵渎(DP) B 绕口令(KMP) C 最远点(LCT) 考试代码 A B C 2018.8.6 正睿暑期集训营 Day3 时间:5h(实际) 期 ...
- 8.8 正睿暑期集训营 Day5
目录 2018.8.8 正睿暑期集训营 Day5 总结 A 友谊巨轮(线段树 动态开点) B 璀璨光滑 C 构解巨树 考试代码 A B C 2018.8.8 正睿暑期集训营 Day5 时间:3.5h( ...
- 8.7 正睿暑期集训营 Day4
目录 2018.8.7 正睿暑期集训营 Day4 A 世界杯(贪心) B 数组(线段树) C 淘汰赛 考试代码 A B C 2018.8.7 正睿暑期集训营 Day4 时间:5h(实际) 期望得分:. ...
- 8.5 正睿暑期集训营 Day2
目录 2018.8.5 正睿暑期集训营 Day2 总结 A.占领地区(前缀和) B.配对(组合) C 导数卷积(NTT) 考试代码 T1 T2 T3 2018.8.5 正睿暑期集训营 Day2 时间: ...
- 7.30 正睿暑期集训营 A班训练赛
目录 2018.7.30 正睿暑期集训营 A班训练赛 T1 A.蔡老板分果子(Hash) T2 B.蔡老板送外卖(并查集 最小生成树) T3 C.蔡老板学数学(DP NTT) 考试代码 T2 T3 2 ...
- 2014 SCAU_ACM 暑期集训
暑期集训,希望能在这段时间获得对得起自己的提升吧 时间:7.11~8.30 集训各专题内容: 1.贪心,递推,基础DP(背包,区间DP,状态压缩DP(去年出了不少于2道铜牌题,看着办)) 2.搜索(B ...
- http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html
http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html
随机推荐
- typedef函数的使用
typedef int INT; //相当于给int起了一个别名INT typedef struct Student { int sid; char name[100]; char sex; }ST; ...
- 2022-1-10 控件学习2 Button、CheckBox、RadioButton、PasswordBox、Image、ToolTip
Button 设置带图片的按钮: 设置button按钮通用类型: CheckBox IsChecked设置是否选中 RadioButton 使用GroupName这 ...
- VSCode中的快捷键
VS Code中的快捷键 文件和编辑操作 Ctrl+S:保存文件 Ctrl+K S:保存全部文件 Ctrl+C:复制 Ctrl+V:粘贴 Ctrl+X:剪切 Ctrl+F:查找 Ctrl+H:替换 C ...
- Tcpdump 使用指南
论网络数据包的分析,我首选wireshark,因为图形化界面直观明了.但如果遇到没有图形化显示的Linux环境,那么此时会使用tcpdump该是一件多么美好的事情. 网上关于tcpdump的介绍很多, ...
- 基于 ASP.NET 的投票系统
OnlineVoting 基于 ASP.NET 的投票系统 功能页面 登录 注册 首页 投票广场 查看别人发布的投票. 个人中心 个人资料 换头像.修改密码和其他信息. 发布投票 项目地址:https ...
- dBeaver操作iotdb并实现导入和导出
1.windows下操作iotdb,现在官网下载相关的iotdb包 官网地址:https://archive.apache.org/dist/iotdb/ 一般建议下载 -all的 2.打开db ...
- 8、Mybatis之自定义映射
8.1.环境搭建 8.1.1.创建新module 创建名为mybatis_resultMap的新module,过程参考5.1节 8.1.2.创建t_emp和t_dept表 CREATE TABLE ` ...
- 【日常踩坑】解决 pip 安装第三方包时因 SSL 报错
目录 踩坑 什么是 SSL ? 为什么会报错 解决办法 1. 临时关闭代理.VPN 或者网络抓包等软件 2. 通过镜像的 HTTP 源来避免 SSL 认证问题 3. 切换至低版本 pip 参考资料 踩 ...
- HarmonyOS扫码服务,应用服务一扫直达打造系统级流量新入口
二维码如今是移动应用流量入口以及功能实现的重要工具,也是各App的流量入口,是物.人.服务的连接器,通过扫码我们可以更便捷的生活,更高效的进行信息交互,包括信息的发布.信息的获取. 在日常扫码过程中, ...
- 【反反爬】使用Jsoup爬取数据保存Excel
本文主要使用Jsoup爬取XXX房屋信息,抓取一些房屋信息,比如房屋楼盘.户型.价格.地址等信息,然后保存到Excel,便于对比和筛选,选出符合预期的好房. 注意,有些网站有防爬取机制,需要设置动 ...