ABC382

上午 NOIP 太憋屈了,我要切水恢复一下信心(

希望 cy 别看见

aaa

A - Daily Cookie

在题目限制中,已经确定 \(S\)@ 字符的个数多于 \(D\)。所以我们直接数 . 的个数加上 \(D\) 就可以。

时间复杂度 \(O(n)\)

点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N=105;
char s[N];
int d,n,ans;
int main(){scanf("%d %d",&n,&d);scanf("%s",s+1);for(int i=1;i<=n;i++)ans+=(s[i]=='.');ans+=d;printf("%d\n",ans);return 0;
}

B - Daily Cookie 2

跟上面那题一样,这次我们直接维护一个指针从 \(n\) 扫到 \(1\),把最先遇到的前 \(D\)@ 变为 .,最后输出即可。

时间复杂度 \(O(n)\)

点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
const int N=105;
char s[N];
int d,n,ans;
int main(){scanf("%d %d",&n,&d);scanf("%s",s+1);int it=n;for(int i=1;i<=d;i++){while(it&&s[it]!='@')it--;s[it]='.';}for(int i=1;i<=n;i++){printf("%c",s[i]);}return 0;
}

C - Kaiten Sushi

如果存在 \(i,j\),满足 \(i<j\)\(A_i<A_j\),那么 \(j\) 是一定吃不到寿司的,因为 \(j\) 可以吃的寿司都会被 \(i\) 提前偷吃。

所以我们去除所有的 \(j\),则剩下的 \(i\) 一定满足 \(A_i\) 单调递减,直接二分查找第一个人即可。

时间复杂度 \(O(n\log n)\)

点击查看代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=2e5+10;
int n,m,t;
int a[N],b[N];
int lower(int x){int l=1,r=t;while(l<r){int mid=(l+r)>>1;if(a[mid]<=x)r=mid;else l=mid+1;}return l;
}
int main(){scanf("%d %d",&n,&m);for(int i=1,x;i<=n;i++){scanf("%d",&x);if(!t||a[t]>x)a[++t]=x,b[t]=i;}for(int i=1,x;i<=m;i++){scanf("%d",&x);if(x<a[t])printf("-1\n");else printf("%d\n",b[lower(x)]);}return 0;
}

因为偷懒想用 lower_bound 花费了不少时间。

D - Keep Distance

入机搜索题。

枚举 \(A_1\) 的取值,然后搜索剩下的数。

纯爆搜会超时,我们只需加上一个小优化,假设当前要填第 \(A_i\) 位,因为接下来 \(i\) 每增加 \(1\)\(A_i\) 就会增加 \(10\),所以此时的 \(A_i\) 必须满足 \(A_{i-1}+(n-i+1)\times 10\le M\),否则就没有搜索的必要了。

可以搜两次,第一次统计方案数,第二次输出方案。

点击查看代码
#include <iostream>
#include <cstdio>
using namespace std;
int n,m,a[13],ans;
inline void print(){for(int i=1;i<=n;i++)printf("%d ",a[i]);printf("\n");
}
inline void dfs(int x){if(x>n)print();else{for(int i=10;a[x-1]+i<=m;i++){if((n-x+1)*10+a[x-1]>m)return;a[x]=a[x-1]+i;dfs(x+1);a[x]=0;}}return;
}
inline void DFS(int x){if(x>n){ans++;}else{for(int i=10;a[x-1]+i<=m;i++){if((n-x+1)*10+a[x-1]>m)return;a[x]=a[x-1]+i;DFS(x+1);a[x]=0;}}return;
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){a[1]=i;DFS(2);}printf("%d\n",ans);for(int i=1;i<=m;i++){a[1]=i;dfs(2);}return 0;
}

这道题最开始写时数组开小,后面调好后提交没有发现 TLE,比赛还有 \(10\min\) 的是否发现没过,差点忘了。

E - Expansion Packs

期望题,不会。

F - Falling Bars

读题读了好长时间。。。话说为什么我的 Atcoder Better 不能用了?

首先没一个条都可以表示成一条纵坐标为 \(x_i\),两个端点横坐标分别是 \([l_i,r_i]\) 的线段。

我们考虑按照初始时的纵坐标从大到小的顺序考虑它最后会移到第几排。

假设现在枚举到了第 \(i\) 条线段,我们枚举它下面的线段 \(j\),用 \(\min\{R_j\}-1\to R_i\)
这样就得到了 \(O(n^2)\) 的算法。

事实上,可以直接用线段树维护 \([1,w]\) 上的区域,每计算出 \(R_i\),就用其更新 \([l_i,r_i]\) 上的区域,计算 \(R_i\) 时,就快速查询 \([l_i,r_i]\) 上的最小值。我的做法是区间取 \(\min\) 区间查 \(\min\) 线段树。但也有用区间赋值区间查 \(\min\) 的更为简单的做法(其实差不多)。

时间复杂度 \(O(n\log n)\)

点击查看代码
#include <iostream>
#include <algorithm>
#include <cstdio>
#define ls (p<<1)
#define rs (p<<1|1)
using namespace std;
const int N=2e5+10,inf=1e9+10;
struct sgt{int mn[N<<2],tag[N<<2];bool used[N<<2];void push_up(int p){mn[p]=min(mn[ls],mn[rs]);}void push_down(int p){if(!used[p])return;mn[ls]=min(mn[ls],tag[p]);mn[rs]=min(mn[rs],tag[p]);tag[ls]=min(tag[ls],tag[p]);tag[rs]=min(tag[rs],tag[p]);used[ls]=used[rs]=1;used[p]=0,tag[p]=inf;}void build(int p,int l,int r){mn[p]=tag[p]=inf;used[p]=0;if(l==r)return;int mid=(l+r)>>1;build(ls,l,mid),build(rs,mid+1,r);return;}void change(int p,int l,int r,int L,int R,int v){if(L<=l&&r<=R){mn[p]=min(mn[p],v);tag[p]=min(tag[p],v);used[p]=1;}else{int mid=(l+r)>>1;push_down(p);if(L<=mid)change(ls,l,mid,L,R,v);if(R>mid)change(rs,mid+1,r,L,R,v);push_up(p);}return;}int ask(int p,int l,int r,int L,int R){if(L<=l&&r<=R)return mn[p];int mid=(l+r)>>1,cnt=inf;push_down(p);if(L<=mid)cnt=min(cnt,ask(ls,l,mid,L,R));if(R>mid)cnt=min(cnt,ask(rs,mid+1,r,L,R));push_up(p);return cnt;}
}tr;
struct node{int x,l,r,id;
}a[N];
bool cmp(node a,node b){return a.x>b.x;
}
int h,w,n,ans[N];
int main(){scanf("%d %d %d",&h,&w,&n);for(int i=1,r,c,L;i<=n;i++){scanf("%d %d %d",&r,&c,&L);a[i]=node{r,c,c+L-1,i};}sort(a+1,a+1+n,cmp);tr.build(1,1,w);for(int i=1;i<=n;i++){ans[a[i].id]=min(tr.ask(1,1,w,a[i].l,a[i].r)-1,h);tr.change(1,1,w,a[i].l,a[i].r,ans[a[i].id]);}for(int i=1;i<=n;i++)printf("%d\n",ans[i]);return 0;
}

G - Tile Distance 3

翻译都没看完。

为啥我 Atcoder Better 突然没法用了啊!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/844304.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kali 安装 shodan

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!网络安全工具:通过百度网盘…

攻防世界misc部分

信女愿要一台永远不会报错的电脑[攻防世界]1-misc 解题根据提示“生日”,猜测8位数暴力破解,大概试一下20000000开始,不然一个小时太久了得到口令20001228又是压缩包,注意CRC,与上图2.zip中相同,猜测明文破解 [攻防世界]BotW- 题目 MASTER USING IT AND YOU CAN HAVE THI…

Shell编程 - 函数篇

自建函数库 - 颜色字符串颜色 字符串输出颜色,有时候关键地方需要醒目,颜色是最好的方式:字体颜色 字体背景颜色 显示方式30:黑 40:黑 0:终端默认设置31:红 41:深红 1:高亮显示32:绿 42:绿 4:下划线33:黄 43:黄色 5:闪烁34:蓝色 44:蓝色 7:反白显示35:紫色 …

[NCTF2019]Fake XML cookbook

题目链接:[NCTF2019]Fake XML cookbook。 打开题目后,环境如下。随便发送一个登陆包后,查看请求包与响应包。尝试 XXE。 POST /doLogin.php HTTP/1.1 Host: f2f80df1-2df7-4b45-a1da-b06e22a5b17a.node5.buuoj.cn:81 Content-Length: 155 Accept: application/xml, text/xml…

9.2

import pandas as pd import scipy.stats as stats data = pd.read_excel(9.2.xlsx) data_values = data.values.flatten().tolist() statistic, p_value = stats.shapiro(data_values) print("Shapiro-Wilk 统计量:", statistic) print("p 值:", p_valu…

Java日志手机号脱敏工具类

背景 在开发过程中,很容易将用户敏感信息,例如手机号码、身份证等,打印在日志平台。为了保护用户数据,又不影响日志的打印,需要将日志中的敏感信息进行脱敏。效果没看明白,强烈建议 pull项目,执行一下项目中SensitiveUtils#main方法。特性支持多层级Json/对象字段脱敏 支…

SSM项目出现的依赖问题

在ssm项目中,整合后,依赖出现问题导致出现了一堆bug 例如:Controller扫描不到、TomCat启动时报错Listener一个或多个启动失败、spring配置文件找不到、TomCat启动时提示启动XXX功能失败 诸如此类一堆问题。。。。 找了很久发现是依赖的问题,项目使用的依赖过多,把之前项目…

高级语言程序设计第九次作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C/ 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13311 学号:092300125 姓名:张天荣 14.17 3. struct Month {char name[12];char nmee2[4];int day;int id; };#include <stdi…

linux安装intel编译器2018

加压软件/public/download/parallel_studio_2018.tgz进入目录后用./install.sh开始安装 按回车 这个选择1,然后需要输入lic激活文件路径。 安装完成后添加PATH到环境变量中 1、如果是普通用户,在用户的.bashrc里面添加 2、如果是root用户,在/etc/profile文件的最后一行添加 …

AGC 069

D. Tree and Intervals 感觉这个题可做啊,真该先开这个题的/fn \(x_i\) 可以看作一端 \(\le i\),另一端 \(>i\) 的边数,进一步可以转化为:把 \(\le i\) 的点染成黑色,\(>i\) 的点染成白色,得到的总连通块数。 考虑判定怎样的“总连通块数”序列是可以被生成的。 一…

基于特征子空间的高维异常检测:一种高效且可解释的方法

本文将重点探讨一种替代传统单一检测器的方法:不是采用单一检测器分析数据集的所有特征,而是构建多个专注于特征子集(即子空间)的检测器系统。 在表格数据的异常检测实践中,我们的目标是识别数据中最为异常的记录,这种异常性可以相对于同一数据集中的其他记录衡量,也可以相…

【机器学习算法】XGBoost原理

一、基本内容基本内容:GBDT的基础上,在损失函数上加入树模型复杂度的正则项与GBDT一样,也是使用新的弱学习器拟合残差(当前模型负梯度,残差方向)GBDT损失函数\[Loss = \sum_{i=1}^{N}L(y_i, y_i^{t}) \] XGboost损失函数\[Loss = \sum_{i=1}^{S}L(y_i, y_i^{t}) + \sum_{…