FJWC2018
晚上水到8:40,感觉药丸。
把电脑带回寝室,大半夜敲键盘……
bzoj5254红绿灯
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
#define ll long long
#define db double
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
#define lc son[pos][0]
#define rc son[pos][1]
const int maxn=5e6+7;
ll n,Q,G,R,mod,d[maxn],h[maxn],p[maxn],f[maxn],TOT,tot;
int next[maxn]; char cc; ll ff;
template<typename T>void read(T& aa) {
aa=0;cc=getchar();ff=1;
while((cc<'0'||cc>'9')&&cc!='-') cc=getchar();
if(cc=='-') ff=-1,cc=getchar();
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
aa*=ff;
} int sum[maxn],son[maxn][2],ql,qr,qx;
void insert(int pos,int last,int l,int r) {
sum[pos]=sum[last]+1;
if(l==r) return;
int mid=(l+r)>>1;
if(qx<=mid) rc=son[last][1],insert(lc=++tot,son[last][0],l,mid);
else lc=son[last][0],insert(rc=++tot,son[last][1],mid+1,r);
} int q(int pos,int l,int r) {
if((!pos)||ql>qr) return 0;
if(l>=ql&&r<=qr) return sum[pos];
int mid=(l+r)>>1,rs=0;
if(ql<=mid) rs+=q(lc,l,mid);
if(qr>mid) rs+=q(rc,mid+1,r);
return rs;
} bool ok(ll a,int pos,int x) {//(t+a)%mod>=g,(t+a)%mod<mod
ll ld=(G+mod-a)%mod,rd=mod-a-1;
if(ld<=rd) {
ql=lower_bound(p+1,p+TOT+1,ld)-p;
qr=upper_bound(p+1,p+TOT+1,rd)-p-1;
return (q(x,1,TOT)-q(pos,1,TOT))==0;
}
else {
ql=1; qr=upper_bound(p+1,p+TOT+1,rd)-p-1;
if((q(x,1,TOT)-q(pos,1,TOT))>0) return 0;
ql=lower_bound(p+1,p+TOT+1,ld)-p; qr=TOT;//
if((q(x,1,TOT)-q(pos,1,TOT))>0) return 0;
}
return 1;
} bool check(int pos,int x) {//(0+t-h[pos])%mod>=g
ll a=(mod-h[pos]%mod)%mod;
return ok(a,pos,x);
} int get_next(int p) {
int l=p,r=n-1,mid;
if(check(p-1,r)) return n+1;
if(!check(p-1,l)) return l+1;
while(l<r-1) {
mid=(l+r)>>1;
if(check(p-1,mid)) l=mid;
else r=mid;
}
return l+2;
} int ef(ll a) {
int l=1,r=n-1,mid;
if(ok(a,0,r)) return n+1;
if(!ok(a,0,l)) return l+1;
while(l<r-1) {
mid=(l+r)>>1;
if(ok(a,0,mid)) l=mid;
else r=mid;
}
return l+2;
} ll get_ans(ll x) {
int pos=ef(x%mod);
x+=h[pos-1];
ll rs=x+f[pos];
if(pos!=n+1) rs+=(mod-x%mod);
return rs;
} int main() {
read(n); read(G); read(R); n++;
ll x,y;
mod=G+R;
For(i,1,n) read(d[i]),h[i]=h[i-1]+d[i];
For(i,1,n) p[i]=h[i]%mod;
sort(p+1,p+n+1);
TOT=unique(p+1,p+n+1)-(p+1);
tot=n;
For(i,1,n) {
qx=lower_bound(p+1,p+TOT+1,h[i]%mod)-p;
insert(i,i-1,1,TOT);
}
next[n]=n+1;
Rep(i,n,1) next[i]=get_next(i);
Rep(i,n,1) {
x=h[next[i]-1]-h[i-1];
f[i]=f[next[i]]+x;
if(next[i]!=n+1) f[i]+=(mod-x%mod);
}
read(Q);
For(i,1,Q) {
read(x);
printf("%lld\n",get_ans(x));
}
return 0;
}
//Serene
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
#define ll long long
#define db double
#define For(i,a,b) for(register int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(register int i=(a);i>=(b);--i)
const int maxn=500+3,maxt=250*499+3,maxT=1e4+7;
const ll mod=1e9+7;
ll Td,n[maxT],m[maxT],f[maxn][maxt],mi[maxn],inv[maxn],C[maxn][maxn],W; char cc; ll ff;
template<typename T>void read(T& aa) {
aa=0;cc=getchar();ff=1;
while((cc<'0'||cc>'9')&&cc!='-') cc=getchar();
if(cc=='-') ff=-1,cc=getchar();
while(cc>='0'&&cc<='9') aa=aa*10+cc-'0',cc=getchar();
aa*=ff;
} ll qp(ll x,ll k) {
ll rs=1;
while(k) {
if(k&1) rs=rs*x%mod;
k>>=1; x=x*x%mod;
}
return rs;
} ll get_C(ll n,ll m) {return mi[n]*inv[m]%mod*inv[n-m]%mod;}
inline void mo(ll& x) {if(x>=mod) x-=mod;}
ll pf(ll x){return x*x%mod;} ll solve(ll n,ll m) {
ll rs=0,x;
For(i,1,n) {//len=i
x=min(m,(ll)i*(i-1)/2);
rs+=C[n][i]*(n-i+1)%mod*mi[n-i]%mod*f[i][x]%mod;
mo(rs);
}
return rs;
} int main() {
read(Td);ll x;
For(i,1,Td) {
read(n[i]); read(m[i]);
W=max(W,n[i]);
}
mi[0]=1; For(i,1,W) mi[i]=mi[i-1]*i%mod;
inv[W]=qp(mi[W],mod-2);
Rep(i,W,1) inv[i-1]=inv[i]*i%mod;
f[0][0]=1;
// cerr<<clock()<<"\n";
For(i,0,W-1) {
x=i*(i-1)/2;
For(j,0,x) {
f[i][j]+=f[i][j-1]; f[i][j]%=mod;
//f[i+1][j+0~j+i] += f[i][j]
f[i+1][j]+=f[i][j];
f[i+1][j+i+1]+=mod-f[i][j];
}
}
x=W*(W-1)/2;
For(j,0,x) f[W][j]+=f[W][j-1],mo(f[W][j]);
// cerr<<clock()<<"\n";
//f[i][j]: perm of 1~i , inverse:j
For(i,0,W) {
x=i*(i-1)/2;
For(j,1,x) {
f[i][j]+=f[i][j-1]; mo(f[i][j]);
}
}
// cerr<<clock()<<"\n";
//f[i][j]: perm of 1~i , inverse:0~j
For(i,1,W) For(j,0,i) C[i][j]=pf(get_C(i,j));
For(i,1,W) mi[i]=pf(mi[i]);
For(i,1,Td)
printf("%lld\n",solve(n[i],m[i]));
return 0;
}
bzoj5256井井点点
###############
#.............#
#.###########.#
#.#.........#.#
#.#.#######.#.#
#.#.#.....#.#.#
#.#.#.###.#.#.#
#.#.#.#.#.#.#.#
#.#.#.###.#.#.#
#.#.#.....#.#.#
#.#.#######.#.#
#.#.........#.#
#.###########.#
#.............#
###############
若有多个合法中心位置,
而且还这么麻烦。

FJWC2018的更多相关文章
- [Bzoj5254][Fjwc2018]红绿灯(线段树)
5254: [Fjwc2018]红绿灯 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 31 Solved: 24[Submit][Status][D ...
- [FJWC2018]全排列
题解: 考虑长度为k的时候的贡献 即取出一些元素然后给他们排个顺序然后问你有多少排法 假设排法为ans 那么应该就是$C(n,k)*C(n,k)*(n-k)!*(n-k)!*(n-k+1)*ans$ ...
- BZOJ5254 : [Fjwc2018]红绿灯
显然所有询问都要经过至少$\sum d$,只需要考虑除了$\sum d$之外的等待红灯的时间. 将所有询问的时间模$g+r$,并按时间用set维护. 那么对于每个红灯,在set中可以找出$1$到$2$ ...
- BZOJ5254 FJWC2018红绿灯(线段树)
注意到一旦在某个路口被红灯逼停,剩下要走的时间是固定的.容易想到预处理出在每个路口被逼停后到达终点的最短时间,这样对于每个询问求出其最早在哪个路口停下就可以了.对于预处理,从下一个要停的路口倒推即可. ...
- [FJWC2018]全排列 DP
题面 题面 题解 (表示第一段文字导致我在考场上没看懂题--因为我以为这个定义是定义在整个排列上的,所以相似 = 相同.结果其实是可以应用在一个区间上--) 首先我们发现,2个区间相似,其实就是离散化 ...
- BZOJ 5254 [Fjwc2018]红绿灯 (线段树)
题目大意:一个wly从家走到学校要经过n个红绿灯,绿灯持续时间是$g$,红灯是$r$,所有红绿灯同时变红变绿,交通规则和现实中一样,不能抢红灯,两个红绿灯之间道路的长度是$di$,一共$Q$个询问,求 ...
- 【FJWC2018】最大真因数
题面 Description 一个合数的真因数是指这个数不包括其本身的所有因数, 例如 6 的正因数有1, 2, 3, 6,其中真因数有 1, 2, 3. 一个合数的最大真因数则是这个数的所有真因数中 ...
随机推荐
- 跟我一起了解koa之koa的cookie(三)
代码中写入 然后我们每次刷新浏览器,代码里面的pvid都会改变 我们可以读取cookie 访问json数据出现结果
- day72作业
目录 models模型类 路由配置 视图配置 序列化组件配置 基于ModelSerializer类,完成Car资源的单查,群查,单增接口 序列化:显示车名,车的颜色,车的价格,车的海报,车的品牌 反序 ...
- c++类成员函数的重载和覆盖有什么区别
1.成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual 关键字可有可无. 2.覆盖是指派生类函数覆盖基类函数,特征是: (1)不同 ...
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子[转]
一.一个叫声接口和几只鸭子 从一个叫声接口开始. {<HeadFirst设计模式>Delphi代码之模式小结 } { 一个叫声接口 } ...
- BM线性递推
#include<bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #defi ...
- Windows 10专业版激活(附激活码)
安全密钥:BT6TH-FN8VP-6WGCK-6BM9R-MWRDB(使用有效,在物理机,虚拟机都激活了一次) 六一八期间自己买了配件第一次组了台式机,系统是在123pe下的原版win10,装好机器之 ...
- 逻辑备份(mysqldump/select into outfile)
#mysqldump备份 shell> mysqldump -uroot -p -P4306 sakila actor>E:\sakila-actor.sql shell> mysq ...
- Flink中的多source+event watermark测试
这次需要做一个监控项目,全网日志的指标计算,上线的话,计算量应该是百亿/天 单个source对应的sql如下 最原始的sql select pro,throwable,level,ip,`count` ...
- 线性求所有数模p的乘法逆元
推理: 假如当前计算的是x在%p意义下的逆元,设$p=kx+y$,则 $\Large kx+y\equiv 0(mod\ p)$ 两边同时乘上$x^{-1}y^{-1}$(这里代表逆元) 则方程变为$ ...
- LA4123 Glenhow Museum
题目大意:蓝书P115 不愧是WF的题 不难发现R的个数为L/2 + 2,O的个数为L/2 - 2 三种做法,第一种比较麻烦,dp[i][j][k][l]表示i个R,j个O,第一个元素是(k)R,最后 ...