AtCoder Grand Contest 015
传送门
A - A+...+B Problem
题意:n个数最大值a,最小值b,求和的可能数量。
#include<cstdio>
#include<algorithm>
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
int n,a,b;
int main(){
n=read();a=read();b=read();
if (n==){
printf("%d\n",a==b);
return ;
}
if (a>b) puts("");else
printf("%lld\n",1LL*(b-a)*(n-)+);
}
B - Evilator
题意:一个电梯,每层只能上或下,问任意两个楼层相互抵达的操作次数之和。保证两两可达。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 110000
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
char s[MN];
long long mmh,n;
int main(){
scanf("%s",s);
n=strlen(s);mmh=(n-)*n;
for (int i=;i<n;i++){
if (s[i]=='U') mmh+=i;else mmh+=n-i-;
}
printf("%lld\n",mmh);
}
C - Nuske vs Phantom Thnook
题意:一个有障碍的地图上,任意两个空地之间至多有一条路,每次询问一个矩形内空地的联通块个数(类似apio2017 T1)
题解:统计矩形内空地数量,满足两端都是空地的边的数量相减即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 2100
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
int n,m,Q,q[MN][MN],w[MN][MN],d[MN][MN],map[MN][MN],x,y,X,Y;
char s[MN];
int main(){
int i,j;
n=read();m=read();Q=read();
for (i=;i<=n;i++){
scanf("%s",s+);
for (j=;j<=m;j++)
map[i][j]=s[j]=='',q[i][j]=q[i-][j]+q[i][j-]-q[i-][j-]+map[i][j];
} for (i=;i<=n;i++)
for (j=;j<=m;j++)
w[i][j]=w[i-][j]+w[i][j-]-w[i-][j-]+(map[i][j]&&map[i][j-]),
d[i][j]=d[i-][j]+d[i][j-]-d[i-][j-]+(map[i][j]&&map[i-][j]); while (Q--){
x=read();y=read();X=read();Y=read();
printf("%d\n",q[X][Y]-q[x-][Y]-q[X][y-]+q[x-][y-]-(w[X][Y]-w[X][y]-w[x-][Y]+w[x-][y])-(d[X][Y]-d[X][y-]-d[x][Y]+d[x][y-]));
}
}
D - A or...or B Problem
题意:给一个区间,问有多少个数能用区间内的数进行or操作得到。
题解:找到l与r最高的不同位(l<2^a<=r),将2^a或上[l,2^a-1]是有贡献的,再递归处理[2^a,r]区间内贡献即可。
比赛结束一分钟过D题样例……
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MN 2100
#define ll long long
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
long long l,r,mmh;
inline ll max(ll a,ll b){return a>b?a:b;}
inline ll min(ll a,ll b){return a<b?a:b;}
inline ll work(ll l,ll r,ll up){
if (l>r) swap(l,r);
int i;
if (l==r) return ;
for (i=;;i--) if (((r>>i)&)&&(!((l>>i)&))) break;
r&=(1ll<<(i+))-;l&=(1ll<<(i+))-;r^=1ll<<i;up^=1ll<<i;
if (r+>=l) return min(1ll<<i,up)-r-;
ll mmh=work(,r,l);
mmh+=min((1ll<<i),up)-l;
return mmh;
}
int main(){
int i,j;
scanf("%lld%lld",&l,&r);
if (l==r) return puts(""),;
printf("%lld\n",work(l,r,1ll<<)+r-l+);
}
E - Mr.Aoki Incubator
题意:数轴上一些质点,有初始位置和速度,初始时选定一些点染色,运动过程中质点相遇可以相互染色(已染的染到未染的上面),问多少种方式能使足够长时间后所有点都被染色。
题解:赛后看题解才会系列……将所有点按速度排序,对于每个点i找出初始坐标小于它的速度最大的点R和初始坐标大于它的速度最小的点L,那么染上点i后,最终[L,R]内的点都会被染上。证明其实很显然,对于(i,R)中的点,如果初始坐标大于i,那会在R碰到i被染上以后被R染上,如果初始坐标小于i,那它自己会碰到i。(L,i)中的点同理。然后用线段树优化一下DP即可。
#include<cstdio>
#include<algorithm>
#define MN 200001
#define lp p<<1
#define rp p<<1|1
using namespace std; int read_p,read_ca;
inline int read(){
read_p=;read_ca=getchar();
while(read_ca<''||read_ca>'') read_ca=getchar();
while(read_ca>=''&&read_ca<='') read_p=read_p*+read_ca-,read_ca=getchar();
return read_p;
}
const int MOD=1e9+;
inline void M(int &x){while(x>=MOD)x-=MOD;}
inline int _M(int x){M(x);return x;}
struct tree{int p,s,c;tree(){c=;}}t[MN*];
struct na{int l,r;}w[MN];
struct ma{int x,v;}a[MN];
bool operator < (ma a,ma b){return a.v<b.v;}
bool operator < (na a,na b){return a.l<b.l;}
int n,m,stl[MN][],str[MN][];
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
void hb(int p,int c){
t[p].c=1LL*t[p].c*c%MOD;
t[p].s=1LL*t[p].s*c%MOD;
}
void pd(int p){if (t[p].c!=) hb(lp,t[p].c),hb(rp,t[p].c),t[p].c=;}
void gx(int p){M(t[p].s=t[lp].s+t[rp].s);}
void add(int p,int l,int r,int k,int v){
if (l==r){
M(t[p].s+=v);
return;
}
if (l!=r) pd(p);
int mid=l+r>>;
if (k<=mid) add(lp,l,mid,k,v);else add(rp,mid+,r,k,v);
gx(p);
}
int ask(int p,int l,int r,int L,int R){
if (l>=L&&r<=R) return t[p].s;
pd(p);
int mid=l+r>>;
if (R<=mid) return ask(lp,l,mid,L,R);else
if (L>mid) return ask(rp,mid+,r,L,R);else
return _M(ask(lp,l,mid,L,R)+ask(rp,mid+,r,L,R));
}
void cc(int p,int l,int r,int k){
if (l>=k) hb(p,);else{
pd(p);
int mid=l+r>>;
if (k>mid) cc(rp,mid+,r,k);else cc(lp,l,mid,k),cc(rp,mid+,r,k);
gx(p);
}
}
int main(){
int i,j;
n=read();
for (i=;i<=n;i++) a[i].x=read(),a[i].v=read();
sort(a+,a++n);
for (i=;i<=n;i++) for (stl[i][]=a[i].x,j=;j<&&(i>>j);j++) stl[i][j]=min(stl[i][j-],stl[i-(<<(j-))][j-]);
for (i=n;i>=;i--) for (str[i][]=a[i].x,j=;j<&&i+(<<j)-<=n;j++) str[i][j]=max(str[i][j-],str[i+(<<(j-))][j-]); for (i=;i<=n;i++){
int l=,r=n;
for (j=;j>=;j--) if (str[l][j]&&str[l][j]<a[i].x) l+=<<j;
for (j=;j>=;j--) if (stl[r][j]&&stl[r][j]>a[i].x) r-=<<j;
w[i].l=l;w[i].r=r;
} sort(w+,w++n);
add(,,n,,);
for (i=;i<=n;i++){
cc(,,n,w[i].r);
add(,,n,w[i].r,ask(,,n,w[i].l-,w[i].r-));
}
printf("%d\n",ask(,,n,n,n));
}
F结论题留坑
AtCoder Grand Contest 015的更多相关文章
- AtCoder Grand Contest 015 C - Nuske vs Phantom Thnook
题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_c 题目大意: 现有一个\(N×M\)的矩阵\(S\),若\(S_{i,j}=1\),则该处为 ...
- AtCoder Grand Contest 015 E - Mr.Aoki Incubator
题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_e 题目大意: 数轴上有\(N\)个点,每个点初始时在位置\(X_i\),以\(V_i\)的速 ...
- Atcoder Grand Contest 015 F - Kenus the Ancient Greek(找性质+乱搞)
洛谷题面传送门 & Atcoder 题面传送门 一道难度 Au 的 AGC F,虽然看过题解之后感觉并不复杂,但放在现场确实挺有挑战性的. 首先第一问很简单,只要每次尽量让"辗转相除 ...
- AtCoder Grand Contest 015 题解
A - A+...+B Problem 常识 Problem Statement Snuke has N integers. Among them, the smallest is A, and th ...
- AtCoder Grand Contest 015题解
传送门 \(A\) 找到能达到的最大的和最小的,那么中间任意一个都可以被表示出来 typedef long long ll; int n,a,b;ll res; int main(){ scanf(& ...
- AtCoder Grand Contest 012
AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...
- AtCoder Grand Contest 011
AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...
- AtCoder Grand Contest 031 简要题解
AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...
- AtCoder Grand Contest 010
AtCoder Grand Contest 010 A - Addition 翻译 黑板上写了\(n\)个正整数,每次会擦去两个奇偶性相同的数,然后把他们的和写会到黑板上,问最终能否只剩下一个数. 题 ...
随机推荐
- ERROR: ORA-12560: TNS: 协议适配器错误,解决办法:启动OracleServiceORCL服务
- NFV、DPDK以及部分用户态协议研究
本文为作者原创,转载请注明出处(http://www.cnblogs.com/mar-q/)by 负赑屃 对我而言,这是一个新的领域,很有意思. 一.解释名词: NFV(Network Functio ...
- ABP .Net Core API和Angular前端APP集成部署
前言:在ABP官网(https://aspnetboilerplate.com)生成的.Net Core + Angular项目前后端是两个独立的项目,我们可以分开部署,也可以将前端和Web API一 ...
- python链接mysql
1.安装MySQLdb MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的. 下载地址: ht ...
- [置顶]
Xamarin android 调用Web Api(ListView使用远程数据)
xamarin android如何调用sqlserver 数据库呢(或者其他的),很多新手都会有这个疑问.xamarin android调用远程数据主要有两种方式: 在Android中保存数据或调用数 ...
- 平方根的C语言实现(二) —— 手算平方根的原理
版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/7220506.html 作者:窗户 Q ...
- ArcGIS 网络分析[2.4] OD成本矩阵
什么是OD成本矩阵? 先不说这个东西是什么,我们还是举一个实际的例子: 现在存在3个城市北京.上海.武汉,请分析他们两两之间的通行时间. 很简单嘛!北京到上海,北京到武汉,上海到武汉都来一次最短路径分 ...
- CentOS 7.x上gitlab搭建教程(https可用,邮件可用)
目录 知识要求 搭建感想 搭建过程 参考 知识要求: nginx基础知识 搭建感想 注:以下是我搭建gitlab时的思考,需要nginx的基础知识,Docker的基础知识才容易理解,与下面的搭建过程是 ...
- ssh简明安全规划
禁止使用口令只允许使用密钥建立 SSH 连接 1.创建 SSH KEY 使用ssh-keygen生成一个密钥对,并且将公钥注册到服务器的 $HOME/.ssh/authorized_keys 文件. ...
- webpack3.x基本配置与总结
基本配置 1.开始之前,请确定你已经安装了当前 Node 的较新版本. 2.然后在文件夹根目录下执行以下命令初始化项目并全局安装webpack: 1.$ cnpm init // 初始化项目 2.$ ...