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

第一题:牛妹爱整除

这个你把一个进制数进行拆分,拆分成若干位,然后在取模,这样会发现如果是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. mysql添加,授权,删除用户以及连接数据库Can't connect to MySQL server on '192.168.31.106' (113)错误排查

    centos7下面操作mysql添加,授权,删除用户 添加用户 以root用户登录数据库,运行以下命令: create user test identified by '; 上面创建了用户test,密 ...

  2. git获取特定的commit

    git reset --hard [commit_id]

  3. Mitmproxy教程

    本文是一个较为完整的 mitmproxy教程,侧重于介绍如何开发拦截脚本,帮助读者能够快速得到一个自定义的代理工具. 本文假设读者有基本的 python 知识,且已经安装好了一个 python 3 开 ...

  4. 用Python爬取大众点评数据,推荐火锅店里最受欢迎的食品

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:有趣的Python PS:如有需要Python学习资料的小伙伴可以加点 ...

  5. Ignatius and the Princess IV HDU 1029

    题目大意: n个数字,找出其中至少出现(n+1)/2次的数字,并且保证n是奇数. 题解:这道题数组是不能用的,因为题目没有明确输入的数据范围,比如输入了一个1e9,数组肯定开不了这么大.所以要用map ...

  6. A - Oil Deposits DFS

    The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...

  7. codeforces Equalizing by Division (easy version)

    output standard output The only difference between easy and hard versions is the number of elements ...

  8. ubuntu-18.0.4 samba安装

    (1)安装 sudo apt-get -y install samba samba-common (2)创建一个用于分享的samba目录. mkdir /home/myshare (3)给创建的这个目 ...

  9. MarkDown排版测试

    1.标题设置 标题(大标题) 标题(小标题) 标题(一级标题) 标题( 二级标题) 标题(三级标题) 标题(四级标题) 备注:大标题与一级标题一样,小标题与二级标题一样,"#"前无 ...

  10. char * 转 wchar *

    ) ) https://github.com/ffftp/ffftp/commit/0b1ea7a23dc6c72d519edbdeb30f48b3c7c8e867