https://www.nowcoder.com/acm/contest/200#question

  最近突然找到了打比赛的乐趣,于是参加了这场比赛.

  

  生日宴会:https://www.nowcoder.com/acm/contest/200/A

  按照题意模拟,没什么好说的.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <cmath>
# include <algorithm>
# include <string>
# define R register int using namespace std; const int maxn=;
char name[maxn][];
int n,m,dat,x,y;
struct nod
{
int val,k;
}id[][maxn];
int h[]; bool cmp (nod a,nod b)
{
return a.val<b.val;
} int main()
{
scanf("%d%d",&n,&m);
for (R i=;i<=n;++i)
{
scanf("%s",name[i]);
scanf("%d",&dat);
id[dat%][ ++h[dat%] ].k=i;
id[dat%][ h[dat%] ].val=dat/;
}
for (R i=;i<=;++i)
sort(id[i]+,id[i]++h[i],cmp);
for (R i=;i<=m;++i)
{
scanf("%d%d",&x,&y);
printf("%s\n",name[ id[y][x].k ]);
}
return ;
}

A

 

  数据结构:https://www.nowcoder.com/acm/contest/200/B

  题意概述:维护一个区间,支持区间加,区间乘,查询区间和,区间平方和.

  好麻烦的题目啊,本来要写线段树的,后来觉得分块可能简单点就写了分块.事实上...并没有简单,还是要打很多标记,维护起来差不多麻烦.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <cmath>
# include <algorithm>
# include <string>
# define R register int
# define ll long long using namespace std; const int maxn=;
long long x,a[maxn],s[maxn],ss[maxn],delta_a[maxn],delta_b[maxn];
int b[maxn],n,m,siz,l,r,opt,si[maxn]; ll read()
{
long long x=,f=;
char c=getchar();
while (!isdigit(c)) { if(c=='-') f=-f; c=getchar(); }
while (isdigit(c)) { x=(x<<)+(x<<)+(c^); c=getchar(); }
return x*f;
} void down (int x)
{
s[x]=;
ss[x]=;
for (R i=+siz*(x-);i<=min(x*siz,n);++i)
{
a[i]=a[i]*delta_a[x]+delta_b[x];
s[x]+=a[i];
ss[x]+=a[i]*a[i];
}
delta_a[x]=;
delta_b[x]=;
} long long ask1 (int l,int r)
{
long long ans=;
int id;
if(b[l]==b[r])
{
id=b[l];
down(id);
for (R i=l;i<=r;++i) ans+=a[i];
}
else
{
id=b[l];
down(id);
for (R i=l;i<=siz*b[l];++i) ans+=a[i];
for (R i=b[l]+;i<=b[r]-;++i) ans+=s[i];
id=b[l];
down(id);
for (R i=+siz*(b[r]-);i<=r;++i) ans+=a[i];
}
return ans;
} long long ask2 (int l,int r)
{
int id;
long long ans=;
if(b[l]==b[r])
{
id=b[l];
down(id);
for (R i=l;i<=r;++i) ans+=a[i]*a[i];
}
else
{
id=b[l];
down(id);
for (R i=l;i<=siz*b[l];++i) ans+=a[i]*a[i];
for (R i=b[l]+;i<=b[r]-;++i) ans+=ss[i];
id=b[l];
down(id);
for (R i=+siz*(b[r]-);i<=r;++i) ans+=a[i]*a[i];
}
return ans;
} void add (int l,int r,ll c)
{
int id;
if(b[l]==b[r])
{
id=b[l];
down(id);
for (R i=l;i<=r;++i)
{
s[id]+=c;
ss[id]+=c*c+*c*a[i];
a[i]=a[i]+c;
}
}
else
{
id=b[l];
down(id);
for (R i=l;i<=siz*b[l];++i)
{
s[id]+=c;
ss[id]+=c*c+*c+a[i];
a[i]=a[i]+c;
}
for (R i=b[l]+;i<=b[r]-;++i)
{
delta_a[i]+=c;
ss[i]+=c*c*si[i]+*c*s[i];
s[i]+=si[i]*c;
}
id=b[r];
down(id);
for (R i=+siz*(b[r]-);i<=r;++i)
{
s[id]+=c;
ss[id]+=c*c+*c+a[i];
a[i]=a[i]+c;
}
}
} void mul (int l,int r,ll c)
{
int id;
if(b[l]==b[r])
{
id=b[l];
down(id);
for (R i=l;i<=r;++i)
{
s[id]+=a[i]*(c-);
ss[id]+=(c*c-)*(a[i]*a[i]);
a[i]*=c;
}
}
else
{
id=b[l];
down(id);
for (R i=l;i<=siz*b[l];++i)
{
s[id]+=a[i]*(c-);
ss[id]+=(c*c-)*(a[i]*a[i]);
a[i]*=c;
}
for (R i=b[l]+;i<=b[r]-;++i)
{
delta_b[i]*=c;
delta_a[i]*=c;
ss[i]*=c;
s[i]*=c;
}
id=b[r];
down(id);
for (R i=+siz*(b[r]-);i<=r;++i)
{
s[id]+=a[i]*(c-);
ss[id]+=(c*c-)*(a[i]*a[i]);
a[i]*=c;
}
}
} int main()
{
scanf("%d%d",&n,&m);
for (R i=;i<=n;++i) a[i]=read();
siz=sqrt(n);
for (R i=;i<=n;++i) b[i]=(i-)/siz+;
for (R i=;i<=n;++i) s[ b[i] ]+=a[i],ss[ b[i] ]+=a[i]*a[i];
for (R i=;i<=n;++i) si[ b[i] ]=siz,delta_a[i]=;
si[ b[n] ]=n-siz*(b[n]-);
for (R i=;i<=m;++i)
{
scanf("%d",&opt);
if(opt==||opt==)
{
scanf("%d%d",&l,&r);
if(opt==) printf("%lld\n",ask1(l,r));
else printf("%lld\n",ask2(l,r));
}
else
{
scanf("%d%d%lld",&l,&r,&x);
if(opt==) mul(l,r,x);
else add(l,r,x);
}
}
return ;
}

B

  迎风舞:https://www.nowcoder.com/acm/contest/200/E

  题意概述:物理题.

  三分抛出方向与水平方向的夹角,解方程算出时间和落地时间即可.关于这个函数为什么是单峰的,这里提供一个不严谨的证明:首先直觉上平抛肯定是比不上上抛的,但是角度为$90$度的上抛运动等于没有抛出去,所以函数应该是满足三分性的.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <cmath>
# include <algorithm>
# include <string>
# define R register int using namespace std; const double g=9.80665;
const double eps=0.000001;
double h,v,l,r,lmid,rmid,ans,lans;
int T; double f (double si)
{
double vx,vy,a,b,c,delta,x1,x2,t;
vy=v*si;
vx=sqrt(v*v-vy*vy);
a=-g/2.0;
b=vy;
c=h;
delta=sqrt(b*b-4.0*a*c); x1=(-b+delta)/(*a);
x2=(-b-delta)/(*a); t=max(x1,x2);
return t*vx;
} int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%lf%lf",&h,&v);
l=,r=;
while (r-l>eps)
{
lmid=l+(r-l)/3.0;
rmid=r-(r-l)/3.0;
if(f(lmid)<f(rmid))
l=lmid;
else r=rmid;
}
printf("%.5lf\n",f(l));
}
return ;
}

E

------------------比赛时就做到这里了,以下是赛后补题------------------

  随风飘:https://www.nowcoder.com/acm/contest/200/D

  题意概述:给定$n$个字符串,求它们两两之间的$LCP$的长度和,此外给出$T$组询问$k$,表示有$k$个字符串消失了,求所有的消失情况下$LCP$的长度和的和.

  其实考试时本来是有机会$A$的,但是都以为开不下存字符串的数组导致纷纷弃疗.开数组靠的是信仰...其实当时为什么不开一个$vector$呢,果然考试时智商会降低.

  首先把字符串都串到$Trie$树上去,统计$k=0$时的答案.对于其他的询问就不能再上树了!要考虑运用组合数学.每个$LCP$有$C_{n-2}^k$种方法留下来,直接算就好了.

  

 # include <cstdio>
# include <iostream>
# include <cstring>
# include <cmath>
# include <algorithm>
# include <string>
# define R register int
# define ll long long
# define mod using namespace std; const int maxs=;
int k,n,q,len,cnt=,c[][];
char s[maxs]; struct Trie
{
int ch[maxs][];
int vis[maxs],s[maxs];
long long ans;
void clear()
{
ans=;
memset(ch,,sizeof(ch));
memset(vis,,sizeof(vis));
memset(s,,sizeof(s));
}
void ins (char *s)
{
int len=strlen(s);
int x=;
for (R i=;i<len;++i)
{
int c=s[i]-'a';
if(!ch[x][c])
ch[x][c]=++cnt;
x=ch[x][c];
}
ans=(ans+vis[x]*len)%mod;
vis[x]++;
}
void upd (int x,int dep)
{
s[x]=vis[x];
for (R i=;i<;++i)
if(ch[x][i])
{
upd(ch[x][i],dep+);
ans=(ans+1LL*dep*s[x]%mod*(s[ ch[x][i] ]))%mod;
s[x]+=s[ ch[x][i] ];
}
}
}T; int main()
{
scanf("%d%d",&n,&q);
for (R i=;i<=n;++i)
{
scanf("%s",s);
T.ins(s);
}
T.upd(,);
c[][]=;
for (R i=;i<=n;++i)
{
c[i][]=;
for (R j=;j<=min(i,);++j)
c[i][j]=(c[i-][j]+c[i-][j-])%mod;
}
for (R i=;i<=q;++i)
{
scanf("%d",&k);
printf("%lld\n",1LL*c[n-][k]*T.ans%mod);
}
return ;
}

D

nowcoder练习赛28的更多相关文章

  1. 牛客练习赛28 E迎风舞 (三分查找)

    链接:https://www.nowcoder.com/acm/contest/200/E来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  2. 牛客练习赛28 B数据结构(线段树)

    链接:https://www.nowcoder.com/acm/contest/200/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  3. Nowcoder 练习赛 23 D Where are you 解题报告

    Where are you 链接: https://ac.nowcoder.com/acm/contest/272/D 来源:牛客网 题目描述 小\(p\)和他的朋友约定好去游乐场游玩,但是他们到了游 ...

  4. 降智严重——nowcoder练习赛46&&codeforces #561 Div2

    两场比赛降智不停,熬夜爆肝更掉rating nowcoder: https://ac.nowcoder.com/acm/contest/894#question T1:水题 T2:考虑a和b的子区间! ...

  5. 线段树 B数据结构 牛客练习赛28

    链接:https://ac.nowcoder.com/acm/contest/200/B来源:牛客网 题目描述 qn姐姐最好了~     qn姐姐给你了一个长度为n的序列还有m次操作让你玩,     ...

  6. Nowcoder 练习赛26E 树上路径 - 树剖

    Description 传送门 给出一个n个点的树,1号节点为根节点,每个点有一个权值 你需要支持以下操作 1.将以u为根的子树内节点(包括u)的权值加val 2.将(u, v)路径上的节点权值加va ...

  7. Nowcoder 练习赛26 D xor序列 ( 线性基 )

    题目链接 题意 : 中文题.点链接 分析 : 对于给定的 X 和 Y 假设存在一个 Z 使得 X (xor) Z = Y 做一个变形 X (xor) Z (xor) Y = 0 X (xor) Y = ...

  8. Nowcoder 练习赛 17 C 操作数 ( k次前缀和、矩阵快速幂打表找规律、组合数 )

    题目链接 题意 :  给定长度为n的数组a,定义一次操作为: 1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod 1,000,000,007: 2. ...

  9. nowcoder模拟赛

    R1 D1 普及组... T1/T2 咕 T3 链接:C 小A有一个只包含左右括号的字符串S.但他觉得这个字符串不够美观,因为它不是一个合法的括号串.一个合法的括号串是这样定义的: ()是合法的括号串 ...

随机推荐

  1. JS存储cookie读取cookie删除cookie详细用法

    假设有这样一种情况,在某个用例流程中,由A页面跳至B页面,若在A页面中采用JS用变量temp保存了某一变量的值,在B页面的时候,同样需要使用JS来引用temp的变量值,对于JS中的全局变量或者静态变量 ...

  2. SqlDataAdapter 对datagridview进行增删改(A)

    这种方法主要是双击datagridview单元格,直接进行添加,修改,删除,在实际开发中并不太常用,另一种方法下一次在具体陈述. using System; using System.Collecti ...

  3. IIS日志自动清理

    IIS在运行的过程中日志会不停地增长,若iis的网站被频繁的调用或不当的调用,则会产生很多日志.我在系统运维的时候曾出现过20G的系统盘,由于合作商开发的程序有问题,每几百微秒调用一次web服务,短期 ...

  4. [日常] Go语言圣经-Deferred函数

    1.只需要在调用普通函数或方法前加上关键字defer,就完成了defer所需要的语法.当defer语句被执行时,跟在defer后面的函数会被延迟执行.直到包含该defer语句的函数执行完毕时,defe ...

  5. Jquery/js引入的button的onclik事件只触发一次

    目标描述 我要实现的是:通过监听button的click事件,从而通过ajax向servlet发送请求获取数据库中的数据,然后返回的页面,并要求局部刷新 一次页面的加载是html直接页面初始化本身的 ...

  6. 最好用的mongodb可视化工具

    TreeSoft数据库管理系统,采用web方式,对mongoDB进行管理维护,一次布署,到处使用, 功能包括:mongoDB数据的查看,新增,编辑,删除,shell命令的执行,树状展示,数据导出JSO ...

  7. JAVA高级面试总结-JVM篇

    1.Sun HotSpot VM,是JDK和Open JDK中自带的虚拟机,也是目前使用范围最广的Java虚拟机. 2.JVM内存分布 程序计数器:是一块较小的内存空间,可以看作是当前线程所执行的字节 ...

  8. Expo大作战(二十一)--expo如何分离(detach),分离后可以比react native更有优势,但也失去了expo的部分优势,

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  9. springcloud 入门 1 (浅谈版本关系)

    SpringCloud: 参考官网:https://projects.spring.io/spring-cloud/            中文版         https://springclou ...

  10. Ink——一款使用React风格开发命令行界面应用(CLI App)的nodejs工具

    Github: https://github.com/vadimdemedes/ink Ink introduction: React for CLIs. Build and test your CL ...