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. 一个合数的最大真因数则是这个数的所有真因数中 ...
随机推荐
- Leetcode946. Validate Stack Sequences验证栈序列
给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true:否则,返回 false . 示例 1: 输入:pus ...
- Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业
# student_urls.py # ————————60PerfectCRM实现CRM学生上课记录———————— from django.conf.urls import url from bp ...
- 19-10-24-J-快乐?
向未来的大家发送祝福(不接受的请自动忽略): 祝大家程序员节快乐! 好了. ZJ一下 额. 考场上差点死了. 码1h后,T1还没过大样例. 我×××. 后来发现是自己××了. T2T3丢暴力. 比咕的 ...
- 装配SpringBean(四)--注解装配之组件扫描
前两篇文章我总结了通过XML方式装配bean的实现方式,虽然比较简单,但是需要配置很多,很多时候我们都会使用注解进行装配.使用注解的方式可以减少XML的配置,既能实现XML的功能,还提供了自动装配功能 ...
- java类增强方式
我理解的增强类即是对类进行功能性扩展,除了网上常规的3种方法( 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但增强内容不可变. 3.动态代理 ...
- IO流19(完) --- RandomAccessFile实现数据的插入 --- 技术搬运工(尚硅谷)
原hello.txt文件中的内容:abcdefghijklmn 想要实现的效果是,将xyz插入到abc后面,将文件内容变成:abcxyzdefghijklmn @Test public void te ...
- matlab中disp函数的简单用法
输出数组类型的数据,也可以把string类型的数据看做数组输出 输出数字 >> num = ; >> disp(num) 输出字符串 >> disp('this i ...
- JasperReports报表表达式12
报表表达式是JasperReports使我们能够显示在报表上的数据计算的强大功能.计算出数据不是一个静态数据,并且不受特别的报表参数或数据源字段传递的数据.报表表达式是由组合报表参数,字段和静态数据. ...
- Servlet开发总结(一)
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口. 用户若想用发一个动态web资源(即开发一个Java程序 ...
- Pandas绘图不支持中文解决方案
参考博客:https://blog.csdn.net/weixin_42057852/article/details/80840215