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. 一个合数的最大真因数则是这个数的所有真因数中 ...
随机推荐
- 廖雪峰Java10加密与安全-3摘要算法-5Hmac
1 比较MD5和HamcMD5 HmacMD5可以看作带安全salt的MD5 import javax.crypto.KeyGenerator; import javax.crypto.Mac; im ...
- HZOI20190829模拟33题解
题面:https://www.cnblogs.com/Juve/articles/11436771.html A:春思 我们对a分解质因数,则$a=\prod\limits_p^{p|a}p^k$ 所 ...
- 关于解码芯片SAA7115及7105的配置 ,FVID与微驱动
最近因为在做视频处理,所以和解码芯片打交道很多,根据DM642的例程总了一些应该配置的东西. 注:以下的配置均是指AV信号输入,PAL制式输出的条件 (一)关于SAA7115(基于TI的驱动) 结构体 ...
- Python学习之高阶函数--嵌套函数、函数装饰器、含参函数装饰器
玩了一晚上王者,突然觉得该学习,然后大晚上的搞出来这道练习题,凌晨一点写博客(之所以这么晚就赶忙写是因为怕第二天看自己程序都忘了咋写的了),我太难了o(╥﹏╥)o 言归正传,练习题要求:构造类似京东的 ...
- 享元模式(Flyweight、FlyweightFactory)(围棋棋子共享)
(使用共享对象可有效地支持大量的细粒度的对象.) 假设开发一个围棋程序,围棋程序的围棋的棋子包含了颜色.大小.位置等信息.在定义一个棋盘容器来存放这些棋子. 我们可以发现,棋盘的成员变量包含了一个棋子 ...
- jmeter-监听器介绍与使用
12.jmeter-监听器介绍与使用 jmeter-监听器介绍与使用 察看结果树 Summary Report 聚合报告 Backend Listener Aggregate Graph 断言结果 C ...
- It\'s A Good Day To Die
[00:01.82]Courage! Duty! Honor! [00:05.67]We call upon our troopers [00:07.90]In this our darkest ho ...
- Tensorflow技巧
1.尽量控制图片大小在1024以内,不然显存会爆炸. 2.尽量使用多GPU并行工作,训练下降速度快. 3.当需要被检测的单张图片里物体太多时,记得修改Region_proposals的个数 4.测试的 ...
- 2019-5-25-如何在-CMD-启动的软件传入带空格的路径
title author date CreateTime categories 如何在 CMD 启动的软件传入带空格的路径 lindexi 2019-05-25 09:31:46 +0800 2019 ...
- 【vuex】vue2-happyfri
我发现我对使用vuex并不擅长,现在跟我一起多多研究项目,好好补补vuex吧 这个开源项目地址为:https://github.com/bailicangdu/vue2-happyfri 这是一个答题 ...