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\)个正整数,每次会擦去两个奇偶性相同的数,然后把他们的和写会到黑板上,问最终能否只剩下一个数. 题 ...
随机推荐
- tesserat训练中文备忘录
最近用OCR识别身份证,用的tesseract引擎.但是google自带的中文库是在太慢了,尤其是对于性别.民族这样结果可以穷举的特征信息而言,完全可以自己训练字库.自己训练字库不仅可以提高识别速度, ...
- DNS查询相关
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/45 一种简单的设计方式是在因特网上使用一个DNS服务器,该服务器 ...
- 【WebGL】《WebGL编程指南》读书笔记——第4章
一.前言 今天继续第四章的学习内容,开始学习复合变换的知识. 二.正文 Example1: 复合变换 在书中,作者为我们封装了一套用于变换的矩阵对象:Matrix4对象.它 ...
- Linux第八讲随笔 -tar / 系统启动流程
linux 第八讲1.tar 参考 作用:压缩和解压文件.tar本身不具有压缩功能.他是调用压缩功能实现的. 语法:tar[必要参数][选择参数][文件] 参数:必要参数有如下: -A 新增压缩文件到 ...
- 5.Nginx作为web缓存服务器
Nginx作为web缓存服务器 从0.7.48版本开始,Nginx支持类似Squid的缓存功能.Nginx的web缓存服务主要由proxy_cache相关命令集合fastcgi_cache相关命令集构 ...
- Linux并发连接上百万的配置
To support over 500k users, you *need* - A bits hardware/kernel (AMD64, Opterons) - At least 8GB of ...
- IT服务(运维)管理实施的几个要点--第二章 人员和组织架构
子曰"没有合适的人" 在流程化的管理模式下,最容易步入的一个误区是按流程设计一个"理想的"组织架构,然后对应于这个架构对人员进行评估.培养,甚至是更换.我见过很 ...
- 图解JQUERY尺寸及位置定义
最近在学习JQUERY的一些应用,接触到了JQUERY对于元素尺寸及位置定义,还有就是配合浏览器尺 寸及状态的计算所做出的一些动画特效.其实像这类JQUERY应用无外乎涉及这些属性的调用:innerH ...
- 队列详解及java实现
导读 栈和队列是有操作限制的线性表. 目录 1.队列的概念.特点.存储结构. 2.栈队列的java实现. 概念 队列是一种在一端进行插入,而在另一端进行删除的线性表.1.队列的插入端称为队尾:队列的删 ...
- java多线程(二)-Runnable和Thread
Java在顺序性语言的基础上提供了多线程的支持.Java的线程机制是抢占式的.这表示调度机制会周期的中断线程,将上下文切换到另一个线程,从而为每个线程都提供时间片.(与抢占式多线程对应的是 协作式多线 ...