C

树的性质是点-边=1

森林联通块计数都可以这么做所以直接维护前缀和再把边界处理一下就好了

//Love and Freedom.
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#define inf 20021225
#define ll long long
#define N 2100
using namespace std;
int read()
{
int f=,s=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
while(ch>=''&&ch<='') s=s*+ch-'',ch=getchar();
return f*s;
}
int a[N][N],p[N][N],e[N][N],hp[N][N],lp[N][N],n,m; char ch[N];
int main()
{
n=read(),m=read(); int Q=read();
for(int i=;i<=n;i++)
{
scanf("%s",ch+);
for(int j=;j<=m;j++)
{
a[i][j]=ch[j]-'';
p[i][j]=p[i-][j]+p[i][j-]-p[i-][j-]+a[i][j];
e[i][j]=e[i-][j]+e[i][j-]-e[i-][j-]+(a[i][j]&a[i-][j])+(a[i][j-]&a[i][j]);
hp[i][j]=hp[i][j-]+(a[i][j]&a[i-][j]);
lp[i][j]=lp[i-][j]+(a[i][j]&a[i][j-]);
}
}
while(Q--)
{
int h1=read(),l1=read(),h2=read(),l2=read();
int poi=p[h2][l2]-p[h2][l1-]-p[h1-][l2]+p[h1-][l1-];
//printf("%d %d %d %d\n",p[h2][l2],p[h2][l1-1],p[h1-1][l2],p[h1-1][l1-1]);
int ed=e[h2][l2]-e[h2][l1-]-e[h1-][l2]+e[h1-][l1-];
//printf("%d ",ed);
ed -= hp[h1][l2]-hp[h1][l1-];
ed -= lp[h2][l1]-lp[h1-][l1];
//printf("%d %d %d %d\n",hp[h1][l2],hp[h1][l1-1],lp[h2][l1],lp[h1-1][l1]);
printf("%d\n",poi-ed);
}
return ;
}

C

D

神仙思路题(我没脑子)

考虑首先AB的最长公共前缀一定可以丢掉

然后下一位B是1A是0

我么设这一位为p

考虑[A,1<<p)的答案和[1<<p,B]的答案

显然只取前面一个集合的答案就是(1<<p)-A

只取后面的 我们考虑B接下来最高位的一个1 记为k

那么答案就是[1<<p,(1<<p) + (1<<k+1)  -1]

最后考虑两个都取 答案是[(1<<p)+A,(2<<p)-1]

发现后面两个需要取并

这类题的思路主要在于取值是区间因此答案也是区间

//Love and Freedom.
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#define inf 20021225
#define ll long long
using namespace std;
int read()
{
int f=,s=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
while(ch>=''&&ch<='') s=s*+ch-'',ch=getchar();
return f*s;
}
int main()
{
ll a,b; scanf("%lld%lld",&a,&b); ll ans=;
if(a==b) return puts(""),;
for(int i=;~i;i--)
if((a>>i&)!=(b>>i&))
{
a&=(1ll<<i+)-; b&=(1ll<<i)-;
ll p=1ll<<i; ans+=p-a;
for(;~i;i--) if(b>>i&) break;
i++; ans+=1ll<<i; a=max(1ll<<i,a);
//printf("%lld %lld %lld\n",ans,i,a);
ans+=p-a;
break;
}
printf("%lld\n",ans);
return ;
}

D

E

其实就差一步了(枯了

考虑一个点能染的点

有显然的两种

1.xj<xi vj>vj

2.xj>xi vj<vi

我们继续考虑一些复杂的

发现对于位置位于当前点之前的速度最大的点若比它的速度大的话就一定会把所有速度小于这个最大值的所有点染色(想想为什么?)

后面的同理

所以按照速度排序以后变成了区间覆盖的方案数

显然可以线段树优化(哦其实可以直接前缀和优化 可惜我懒qwq)

所以就做完了

//Love and Freedom.
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#define inf 20021225
#define ll long long
#define N 200100
#define mdn 1000000007
#define ls (x<<1)
#define rs (x<<1|1)
#define mid (l+r>>1)
using namespace std;
int read()
{
int f=,s=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
while(ch>=''&&ch<='') s=s*+ch-'',ch=getchar();
return f*s;
}
void upd(int &x,int y){x+=x+y>=mdn?y-mdn:y;}
int t[N<<];
void pushup(int x){t[x]=(t[ls]+t[rs])%mdn;}
void modify(int x,int l,int r,int d,int val)
{
if(l==r){upd(t[x],val); return;}
if(d<=mid) modify(ls,l,mid,d,val);
else modify(rs,mid+,r,d,val);
pushup(x);
}
int query(int x,int l,int r,int LL,int RR)
{
if(LL<=l&&RR>=r) return t[x]; int ans=;
if(LL<=mid) upd(ans,query(ls,l,mid,LL,RR));
if(RR>mid) upd(ans,query(rs,mid+,r,LL,RR));
return ans;
}
struct node{int x,v,idx,idv;}a[N];
struct seg{int l,r;}s[N];
bool operator<(seg a,seg b){return a.r<b.r||(a.r==b.r&&a.l<b.l);}
bool cmpv(node x,node y){return x.v<y.v;}
bool cmpx(node x,node y){return x.x<y.x;}
int pre[N],suf[N],n,v[N];
int main()
{
n=read();
for(int i=;i<=n;i++) a[i].x=read(),a[i].v=read();
sort(a+,a+n+,cmpv);
for(int i=;i<=n;i++) a[i].idv=i,v[i]=a[i].v;
sort(a+,a+n+,cmpx); //suf[n+1]=inf*99;
for(int i=;i<=n;i++)
{
if(i==) pre[]=a[].idv;
else
{
if(a[i].v>v[pre[i-]]) pre[i]=a[i].idv;
else pre[i]=pre[i-];
}
a[i].idx=i;
}
for(int i=n;i;i--)
{
if(i==n) suf[n]=a[n].idv;
else
{
if(a[i].v<v[suf[i+]]) suf[i]=a[i].idv;
else suf[i]=suf[i+];
}
}
modify(,,n,,);
for(int i=;i<=n;i++)
{
int r=pre[a[i].idx],l=suf[a[i].idx];
s[i].l=l; s[i].r=r;
}
sort(s+,s+n+);
for(int i=;i<=n;i++)
{
int l=s[i].l,r=s[i].r;
int val=query(,,n,l-,r);
modify(,,n,r,val);
}
printf("%d\n",query(,,n,n,n));
return ;
}

E

F

第一问显然是Fib(昨天刚好学类欧于是反应贼快)

第二问还8会 等我咕会

我去世了 下一周 我们就考到了这个题/px

具体做法很神仙 我懒得写了 大概就是考虑递推出来的组数都不会特别多

然后考虑再从上一层推出当前答案即可

//Love and Freedom.
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<vector>
#define inf 20021225
#define ll long long
#define pa pair<ll,ll>
#define mp make_pair
#define pb push_back
#define mdn 1000000007
using namespace std;
int read()
{
int f=,s=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-') f=-; ch=getchar();}
while(ch>=''&&ch<='') s=s*+ch-'',ch=getchar();
return f*s;
}
ll fib[]; vector<pa> ans[];
int work(ll a,ll b,ll x,ll y)
{
int cur=;
if(x>=b&&y>=a+b) (cur+=(y-a)/b%mdn)%mdn;
if(y>=b&&x>=a+b) (cur+=(x-a)/b%mdn)%mdn;
return cur;
}
int main()
{
int top; fib[]=fib[top=]=;
while(fib[top]<=4e18) ++top,fib[top]=fib[top-]+fib[top-];
ans[].pb(mp(0ll,1ll)),ans[].pb(mp(0ll,2ll));
for(int i=;i+<=top;i++)
{
for(int j=;j<ans[i].size();j++)
{
ll x=ans[i][j].first,y=ans[i][j].second; x+=y;
while(x<=fib[i+]+fib[i])
{
if(x>y) ans[i+].pb(mp(y,x));
x+=y;
}
}
}
int q=read();
while(q--)
{
ll x,y; scanf("%lld%lld",&x,&y);
if(x>y) swap(x,y); int cur=;
while(fib[cur+]<=y&&fib[cur+]<=x) cur++;
printf("%d ",cur); int sum=;
if(cur==){printf("%lld\n",x%mdn*y%mdn); continue;}
for(int i=;i<ans[cur-].size();i++)
(sum+=work(ans[cur-][i].first,ans[cur-][i].second,x,y))%=mdn;
printf("%d\n",sum);
}
return ;
}

F

AGC015做题记录的更多相关文章

  1. UOJ 做题记录

    UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...

  2. project euler做题记录

    ProjectEuler_做题记录 简单记录一下. problem 441 The inverse summation of coprime couples 神仙题.考虑答案为: \[\begin{a ...

  3. Sam做题记录

    Sam做题记录 Hihocoder 后缀自动机二·重复旋律5 求一个串中本质不同的子串数 显然,答案是 \(\sum len[i]-len[fa[i]]\) Hihocoder 后缀自动机三·重复旋律 ...

  4. 退役IV次后做题记录

    退役IV次后做题记录 我啥都不会了.... AGC023 D 如果所有的楼房都在\(S\)同一边可以直接得出答案. 否则考虑最左最右两边的票数,如果左边>=右边,那么最右边会投给左边,因为就算车 ...

  5. 退役III次后做题记录(扯淡)

    退役III次后做题记录(扯淡) CF607E Cross Sum 计算几何屎题 直接二分一下,算出每条线的位置然后算 注意相对位置这个不能先搞出坐标,直接算角度就行了,不然会卡精度/px flag:计 ...

  6. 退役II次后做题记录

    退役II次后做题记录 感觉没啥好更的,咕. atcoder1219 历史研究 回滚莫队. [六省联考2017]组合数问题 我是傻逼 按照组合意义等价于\(nk\)个物品,选的物品\(\mod k\) ...

  7. BJOI做题记录

    BJOI做题记录 终于想起还要做一下历年省选题了2333 然而咕了的还是比做了的多2333 LOJ #2178. 「BJOI2017」机动训练 咕了. LOJ #2179. 「BJOI2017」树的难 ...

  8. FJOI2017前做题记录

    FJOI2017前做题记录 2017-04-15 [ZJOI2017] 树状数组 问题转化后,变成区间随机将一个数异或一,询问两个位置的值相等的概率.(注意特判询问有一个区间的左端点为1的情况,因为题 ...

  9. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

随机推荐

  1. nginx请求转发配置

    以下为无ssl证书配置的请求转发 server { listen ; server_name api.****.com; #以下为指定请求域名匹配到某一个端口 #location ~* /union ...

  2. fiddler之模拟请求超时和弱网模式

    在针对手机端测试时,很多情况下我们需要测试响应超时和弱网情况的响应情况.此时可以使用fiddler提供的断点和弱网功能进行测试. 1.请求超时 设置断点,是请求响应超时.查看请求结果. Rules-- ...

  3. Selenium学习之==>Xpath使用方法

    一.什么是Xpath XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素. 工具 Xpath的练习建议大家安装火狐浏览器后,下载插件,FireBug.由于最新版火狐不再支持 ...

  4. 【MM系列】SAP 关于更改物料的价格控制类型

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 关于更改物料的价格控制类型 ...

  5. 【ABAP系列】SAP ABAP控制单元格是否可编辑

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP控制单元格是否可 ...

  6. python-应用OpenCV和Python进行SIFT算法的实现

    如下图为进行测试的q和h,分别验证基于BFmatcher.FlannBasedMatcher等的SIFT算法 代码如下: import numpy as np import cv2 from matp ...

  7. 【计算机视觉】HDR之tone mapping简介

    tone Mapping原是摄影学中的一个术语,因为打印相片所能表现的亮度范围不足以表现现实世界中的亮度域,而如果简单的将真实世界的整个亮度域线性压缩到照片所能表现的亮度域内,则会在明暗两端同时丢失很 ...

  8. Ubuntu 16.04系统挂载4T硬盘

    问题描述: Ubuntu 16.04系统,系统盘为240G固态硬盘,还有1T机械硬盘,现要再添加一个4T硬盘. 问题分析: 使用GTP对硬盘进行分区并挂载硬盘的方法,一般而言服务器上挂载的硬盘都是比较 ...

  9. 分享之测试WebService小工具 STORM(转)

    http://www.cnblogs.com/yhuang/archive/2012/04/04/share_storm.html 最近的项目中,一直要使用到WebService,为了测试自己编写的W ...

  10. Oracle SQL调优

    在多数情况下,Oracle使用索引t来更快地遍历表,优化器主要根据定义的索引来提高性能. 但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种 ...