题目都不是很难,就是最后一题有点毒瘤

第一题:牛妹爱整除

这个你把一个进制数进行拆分,拆分成若干位,然后在取模,这样会发现如果是x进制的数,那么对x+1这个进制转化即满足条件。

举个例子:一个x进制数abc  a*x*x+b*x+c

那么(a*x*x+b*x+c)%k  满足于 (a+b+c) 相等

则x=k+1,那么x%k==1  所以 a*(x%k)*(x%k)%k+b*(x%k)%k+c%k==(a+b+c)%k

代码很简单,有需求可以直接去牛客找

第二题:吃桃

这个是一个树的题目,直接dfs就可以解决,算是dp吧。

首先dfs找到深度,然后在找深度的同时把路径记录下来,最后输出,

为了保证小的先选可以先拍个序。

第三题:背包问题

这个是一个很裸的背包。

dp[j]表示价值为 j 的物品,可以占的最多的背包体积

第四题:泡面

不知道自己怎么就过了,之前cf有一个差不多的题目(我之前以为差不多),后来发现是两个不一样的题目。

但是比赛的时候并没有发现,然后我按照我的印象写了,居然A了,因为我写出bug了,但是这个bug好像很合适这个题目,谜之A了。。。

赛后重新写了一次。

这个就是一个模拟,用个优先队列模拟就可以了。

注意开longlong

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=1e5+;
typedef long long ll;
struct node{
ll id,val;
node(ll id=,ll val=):id(id),val(val){}
bool operator<(const node &a)const{
return a.id<id;
}
}a[maxn];
bool cmp(node a,node b){
return a.val<b.val;
}
priority_queue<node>que;
ll ans[maxn];
int main(){
ll n,p,x;
scanf("%lld%lld",&n,&p);
for(int i=;i<=n;i++) {
scanf("%lld",&x);
a[i]=node(i,x);
}
sort(a+,a++n,cmp);
ll nowtime=a[].val,now=;
while(!que.empty()) que.pop();
que.push(a[]);
while(!que.empty()){
nowtime+=p;
node u=que.top();que.pop();
ans[u.id]=nowtime;
while(now<=n&&a[now].val<=nowtime){
que.push(a[now]);
now++;
}
if(que.empty()&&now<=n){
nowtime=a[now].val;
que.push(a[now]);
now++;
}
}
for(int i=;i<=n;i++) printf("%lld ",ans[i]);
printf("\n");
return ;
}

泡面

cf和这个很像的题目

https://codeforces.com/contest/1248/problem/E

#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
#include <map>
#include <iostream>
#include <cstdlib>
#include <stack>
#define inf 0x3f3f3f3f
#define LL long long
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
struct node{
int id;
ll tim;
node(int id=,ll tim=):id(id),tim(tim){}
bool operator<(const node&a)const{
return a.id<id;
}
}a[maxn];
queue<node>que;
priority_queue<node>prique;
int mins[maxn*];
void build(int id,int l,int r){
mins[id]=inf;
if(l==r) return ;
int mid=(l+r)>>;
build(id<<,l,mid);
build(id<<|,mid+,r);
}
void push_up(int id){
mins[id]=min(mins[id<<],mins[id<<|]);
} void update(int id,int l,int r,int pos,int val){
if(l==r){
mins[id]=val;
return ;
}
int mid=(l+r)>>;
if(pos<=mid) update(id<<,l,mid,pos,val);
else update(id<<|,mid+,r,pos,val);
push_up(id);
}
bool cmp(node a,node b){
if(a.tim==b.tim) return a.id<b.id;
return a.tim<b.tim;
}
ll ans[maxn];
int main(){
int n,p;
scanf("%d%d",&n,&p);
build(,,n);
for(int i=;i<=n;i++) scanf("%lld",&a[i].tim),a[i].id=i;
sort(a+,a++n,cmp); while(!que.empty()) que.pop();
while(!prique.empty()) prique.pop(); int now=;
ll nowtime=a[now].tim;
que.push(a[now]);
update(,,n,a[now].id,a[now].id);now++; while(now<=n&&a[now].tim<=nowtime+p){
if(a[now].id<=mins[]) {
que.push(a[now]);
update(,,n,a[now].id,a[now].id);now++;
}
else prique.push(a[now]),now++;
} while(now<=n||!que.empty()||!prique.empty()){
while(!prique.empty()){
node u=prique.top();
if(u.id<=mins[]){
prique.pop();
que.push(u);
update(,,n,u.id,u.id);
}
else break;
}
while(now<=n&&a[now].tim<=nowtime+p){
if(a[now].id<=mins[]) {
que.push(a[now]);
update(,,n,a[now].id,a[now].id);now++;
}
else prique.push(a[now]),now++;
}
if(!que.empty()){
int u=que.front().id;que.pop();
ans[u]=nowtime+p;
update(,,n,u,inf);
}
nowtime+=p;
if(que.empty()&&prique.empty()&&now<=n) nowtime=a[now].tim;
}
for(int i=;i<=n;i++) printf("%lld ",ans[i]);
printf("\n");
return ;
}

E - Queue in the Train

第五题:伪直径

这个题目如果你之前碰到过求直径的题目就可以很快的反应过来,但是如果没有呢,就可能需要思考一会吧。

而且这个题目名字已经给了很大的提示了,所以还是很好写的。

答案就是直径减一

怎么求直径呢?这可以从紫书上看

就是两次dfs

就是随便找一个点然后找到最深的叶子节点,然后从这个叶子节点找到最深的另一个叶子节点就可以了。

第六题:最大最小差

这个题目好毒瘤

比赛的时候没有写出来

然后赛后,用线段树+二分写了一次,tle 3分

然后问了一个oi dalao,学习了一下双指针+st表的写法,依旧tle,但是 18分

最后加了各种优化,19分 tle

最后学会了一种超级厉害的快读,终于A了,oi的快读真强。

好像还可以用单调队列+双指针写,但是好难写,我不会。。。

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
# define getchar() (S==T&&(T=(S=BB)+fread(BB,,<<,stdin),S==T)?EOF:*S++)
char BB[ << ], *S = BB, *T = BB;
using namespace std;
const int maxn=1e6+;
typedef long long ll;
int maxsum[maxn][],minsum[maxn][],a[][maxn],v[],f[maxn],w[];
void init(int n){
for(int i=;i<maxn;i++) f[i]=(log(i*1.0)/log(2.0));
for(int i=;i<;i++) w[i]=(<<i);
}
void RMQ(int id,int n) {
for(int i=;i<=n;i++){
maxsum[i][]=a[id][i];
minsum[i][]=a[id][i];
}
for (int i = ; i < ; i++) {
for (int j = ; j <= n; j++) {
if (j + w[i] - <= n) {
maxsum[j][i] = max(maxsum[j][i - ], maxsum[j + w[i-]][i - ]);
minsum[j][i] = min(minsum[j][i - ], minsum[j + w[i-]][i - ]);
}
}
}
} int st(int x,int y){
int k=f[y-x+];
int maxnum = max(maxsum[x][k], maxsum[y - w[k] + ][k]);
int minnum = min(minsum[x][k], minsum[y - w[k] + ][k]);
int ans = maxnum - minnum;
return ans;
}
int L[maxn],R[maxn];
int read()
{
int x=;
char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) x=(x<<)+(x<<)+(c^),c=getchar();
return x;
} inline void write(ll X) {
if (X < ) { putchar('-'); X = ~(X - ); }
int s[], top = ;
while (X) { s[++top] = X % ; X /= ; }
if (!top) s[++top] = ;
while (top) putchar(s[top--] + '');
putchar('\n');
} int main(){
int n,t;
n=read();
t=read();
init(n);
for(int i=;i<=t;i++) v[i]=read();
for(int i=;i<=t;i++){
for(int j=;j<=n;j++){
a[i][j]=read();
}
}
ll ans=;
memset(R,inf,sizeof(R));
for(int i=;i<=t;i++){
RMQ(i,n);
int p1=,p2=;
for(int j=;j<=n;j++){
while(p1<=j&&st(p1,j)>v[i]) p1++;
while(p2+<=j&&st(p2+,j)>=v[i]) p2++; if(st(p1,j)!=v[i]) L[j]=inf;
else L[j]=max(L[j],p1);
if(st(p2,j)!=v[i]) R[j]=;
else R[j]=min(R[j],p2);
}
}
for(int i=;i<=n;i++){
if(L[i]<=R[i]) ans+=R[i]-L[i]+;
}
// printf("%lld\n",ans);
write(ans);
return ;
}

快读好厉害

2019-2020Nowcoder Girl初赛 题解的更多相关文章

  1. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...

  2. Comet OJ 2019 夏季欢乐赛题解

    Comet OJ 2019 夏季欢乐赛题解 我是来骗访问量的 A 完全k叉树 \(n\)个点的完全k叉树的直径. 直接做 B 距离产生美 直接做 C 烤面包片 \(n!!!\mod p\) 显然\(n ...

  3. [NOIP2018]普及组初赛题解

    老师布置的作业,借博客这个平台一用 [总体感觉]对我而言比去年的难度大……特别是最后一题. 选择题 1.D 打印机属于输出设备 2.D 将全部进制转换为10进制进行对比,我的方法是每一位乘以进制的位数 ...

  4. 洛谷P5283 & LOJ3048:[十二省联考2019]异或粽子——题解

    https://www.luogu.org/problemnew/show/P5283 https://loj.ac/problem/3048 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子 ...

  5. kick start 2019 round D T3题解

    ---恢复内容开始--- 题目大意:共有N个房子,每个房子都有各自的坐标X[i],占据每个房子需要一定花费C[i].现在需要选择K个房子作为仓库,1个房子作为商店(与题目不同,概念一样),由于仓库到房 ...

  6. kick start 2019 round D T2题解

    题目大意:由N个房子围成一个环,G个人分别顺时针/逆时针在房子上走,一共走M分钟,每分钟结束,每个人顺/逆时针走到相邻的房子.对于每个房子都会记录最后时刻到达的人(可能是一群人).最终输出每个人会被几 ...

  7. 2019.11.11&12题解

    Day1 考的不是很好,T1T2没区分度,T3想的太少,考试后期几乎都是在摸鱼,bitset乱搞也不敢打,只拿到了35分,跟前面的差距很大 A. 最大或 标签: 二进制+贪心 题解: 首先x,y中一定 ...

  8. 2019.11.12&13题解

    写在前面: 虽然拿到了rk1,但是T3被卡常TLE90分,(考后再交就A了!?),lemon80,又丢失了一次良好的AK机会, 掐头去尾距离联赛仅剩2天,最近中午一直睡不好,可能是有些紧张, 希望自己 ...

  9. The Preliminary Contest for ICPC Asia Nanjing 2019/2019南京网络赛——题解

    (施工中……已更新DF) 比赛传送门:https://www.jisuanke.com/contest/3004 D. Robots(期望dp) 题意 给一个DAG,保证入度为$0$的点只有$1$,出 ...

  10. 2019-2020Nowcoder Girl初赛题解

    写了一天计算几何,心态崩了,水一篇题解休息休息. emmmm,如果您是一名现役OIer/CSPer,那看这篇文章也许并不能在你的生命中留下些什么(潮子语录),因为相比NOIP/CSP这个比赛其实比较简 ...

随机推荐

  1. 在java 中一种简单方式的声明静态Map常量的方法

    我现在需要在一个类里面放一个HashMap,往里面放一些数据,每次要从数据库中取数据的时候先查找HashMap,看是否已经存在,若存在就直接提取,若不存在就从数据库中抽取数据之后再放到HashMap中 ...

  2. python爬虫实例,一小时上手爬取淘宝评论(附代码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 1 明确目的 通过访问天猫的网站,先搜索对应的商品,然后爬取它的评论数据. ...

  3. Python中的可视化神器!你知道是啥吗?没错就是pyecharts!

    pyecharts是一款将python与echarts结合的强大的数据可视化工具,本文将为你阐述pyecharts的使用细则 前言 我们都知道python上的一款可视化工具matplotlib,而前些 ...

  4. Python数据预处理:使用Dask和Numba并行化加速

    如果你善于使用Pandas变换数据.创建特征以及清洗数据等,那么你就能够轻松地使用Dask和Numba并行加速你的工作.单纯从速度上比较,Dask完胜Python,而Numba打败Dask,那么Num ...

  5. Java中集合的嵌套

    集合的嵌套遍历 获取10个1-20之间的随机数,要求不能重复 键盘录入多个数据,以0结束,要求在控制台输出这多个数据的最大值. public static void main(String[] arg ...

  6. java实现自定义哈希表

    哈希表实现原理 哈希表底层是使用数组实现的,因为数组使用下标查找元素很快.所以实现哈希表的关键就是把某种数据类型通过计算变成数组的下标(这个计算就是hashCode()函数 比如,你怎么把一个字符串转 ...

  7. css的变量教程,更强大的css

    当微软宣布 Edge 浏览器将支持 CSS 变量.这个重要的 CSS 新功能,所有主要浏览器已经都支持了.本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大. 一.变量的声明 声明变量的时 ...

  8. Java代码生成器加入postgresql数据库、HikariCP连接池、swagger2支持!

    目录 前言 PostgreSql VS MySql HikariCP VS Druid Swagger2 自定义参数配置一览 结语 前言   最近几天又抽时间给代码生成器增加了几个新功能(预计今晚发布 ...

  9. 0day学习笔记(3)Windows定位API引起的惨案(原理)

    段选择器FS与TEB WinNT内核下内存采用保护模式,段寄存器的意义与实模式汇编下的意义不同.另外,FS存的是段选择子,而不是实模式下的高16位基地址. FS寄存器指向当前活动线程的TEB结构(线程 ...

  10. SourceTree for Windows跳过登录解决方法

    来源:https://blog.csdn.net/t_332741160/article/details/79611303 SourceTree 是一个强大的git管理客户端,但是在使用最新版需要登录 ...