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. 关于ASPxComboBox通过ClientInstanceName,js获取不到控件的问题

    今天突然遇到一个很奇葩的问题 ASPxComboBox中设置了ClientInstanceName.但是通过cmbOrganization.GetValue()获取不到值. 报错cmbOrganiza ...

  2. 树莓派安装.net core 2.1

    0.更新源 sudo apt-get update 1.安装依赖 sudo apt-get install curl libunwind8 gettext 2.下载 SDK 或者 RunTime ht ...

  3. DataGridview启用列重新排序属性的作用

    DataGridview是winform中经常用的控件,今天来了解一下启用列重新排序属性的作用 默认没有选中是不能改变列前后顺序的 启用列重新排序后如下图可以拖动列标题(列标头)来改变列前后顺序

  4. [日常] Go语言圣经-Goroutines和线程

    Goroutines和线程: 1.动态栈: 1)线程都有一个固定大小的内存块(一般会是2MB)来做栈 2)一个goroutine会以一个很小的栈开始其生命周期,一般只需要2KB,不是固定的:栈的大小会 ...

  5. JavaSE Collections类 , Iterator迭代器 , 增强for循环

    Collections 它是集合的工具类,为集合体系扩展了一些其他的方法.类中都是静态的方法,可以使用类名直接调用. 可变参数 在JDK1.5之后,如果我们定义一个方法需要接受多个参数,并且多个参数类 ...

  6. 关于HTML框架(frameset)的一些基本用法

    frameset 定义 W3C是这样定义frameset框架的,通过使用框架,你可以在同一个浏览器窗口中显示不止一个页面.每份HTML文档称为一个框架,并且每个框架都独立于其他的框架.注意,这是HTM ...

  7. format格式化字符串

    假如想要表达这样一条语句:李明今年十二岁 输出这样一条语句 name = 'LiMing' age = 12 print( name + 'is' + age + 'years old') #输出 L ...

  8. AJAX通过HTML请求C#一般处理程序

    AJAX通过HTML请求C#一般处理程序 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...

  9. PHP 协程最简洁的讲解

    协程,又称微线程,纤程.英文名Coroutine.协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B在执 ...

  10. npm 安装指定模块版本

    npm list  查看具体模块 如: npm list @antv/g6 如需要安装指定的模块和版本 保存时      - --save-dev 是你开发时候依赖的东西,--save 是你发布之后还 ...