传送门

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的更多相关文章

  1. AtCoder Grand Contest 015 C - Nuske vs Phantom Thnook

    题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_c 题目大意: 现有一个\(N×M\)的矩阵\(S\),若\(S_{i,j}=1\),则该处为 ...

  2. AtCoder Grand Contest 015 E - Mr.Aoki Incubator

    题目传送门:https://agc015.contest.atcoder.jp/tasks/agc015_e 题目大意: 数轴上有\(N\)个点,每个点初始时在位置\(X_i\),以\(V_i\)的速 ...

  3. Atcoder Grand Contest 015 F - Kenus the Ancient Greek(找性质+乱搞)

    洛谷题面传送门 & Atcoder 题面传送门 一道难度 Au 的 AGC F,虽然看过题解之后感觉并不复杂,但放在现场确实挺有挑战性的. 首先第一问很简单,只要每次尽量让"辗转相除 ...

  4. AtCoder Grand Contest 015 题解

    A - A+...+B Problem 常识 Problem Statement Snuke has N integers. Among them, the smallest is A, and th ...

  5. AtCoder Grand Contest 015题解

    传送门 \(A\) 找到能达到的最大的和最小的,那么中间任意一个都可以被表示出来 typedef long long ll; int n,a,b;ll res; int main(){ scanf(& ...

  6. AtCoder Grand Contest 012

    AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...

  7. AtCoder Grand Contest 011

    AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...

  8. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

  9. AtCoder Grand Contest 010

    AtCoder Grand Contest 010 A - Addition 翻译 黑板上写了\(n\)个正整数,每次会擦去两个奇偶性相同的数,然后把他们的和写会到黑板上,问最终能否只剩下一个数. 题 ...

随机推荐

  1. Ubuntu系统怎么切换多用户命令界面

    ctrl+alt+F2~F6 切换窗口 返回桌面 Ctrl+Alt+F7

  2. 【python】函数filter、map

  3. [array] leetcode - 33. Search in Rotated Sorted Array - Medium

    leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ...

  4. [转]winform 自动伸缩控件xpandercontrols 使用说明

    链接地址:http://blog.sina.com.cn/s/blog_b5b004920101f5h3.html

  5. tar --打包和压缩

    tar  参考链接 作用:为linux的文件和目录创建档案,也可以在档案中改变文件,或者向档案中加入新的文件即用来压缩和解压文件.tar本身不具有压缩功能.他是调用压缩功能实现的 语法:tar[必要参 ...

  6. C#生成缩略图 (通用模式)

    用数据库保存图片的路径和文件名称,把文件保存在文件夹中.//保存在数据库中的文件路径ArrayList arrFilePath=new ArrayList();arrFilePath=myCommon ...

  7. HTTPS加密流程超详解(二)

    2.进入正题 上篇文章介绍了如何简单搭建一个环境帮助我们分析,今天我们就进入正题,开始在这个环境下分析. 我们使用IE浏览器访问Web服务器根目录的test.txt文件并抓包,可以抓到如下6个包(前面 ...

  8. 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure(对于二分类问题)

    首先我们可以计算准确率(accuracy),其定义是: 对于给定的测试数据集,分类器正确分类的样本数与总样本数之比.也就是损失函数是0-1损失时测试数据集上的准确率. 下面在介绍时使用一下例子: 一个 ...

  9. (转)top关键字与top表达式(SQLServer)

    SQLServer 中,top也很有用,例如查询部分数据,还可以用表达式.其语法如下: SELECT TOP number|percent column_name(s) FROM table_name ...

  10. JDK并发包常用的知识图

    并发包需要注意的知识点 集合类的体系结构