暑假集训CSP提高模拟11
A.Fate
求次短路方案数.
这题有点小水了,好像之前做过.
具体的方案显然是 DP,考虑枚举当前每一个路径长度,假如比最短路更优则覆盖最短路,之前的最短路用来覆盖次短路. 否则如果比次短路更优,则直接覆盖次短路.
方案数的话考虑一样的方法维护,只是在遇到相等的路径长时使方案数加一即可.
考试的时候把转移写在最短路里面了,所以错了一遍,因为这样是不完全更新,所以要拉到外面跑一遍.
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int p=1e9+7;
vector<int>e[200001];
int dis[200001],f[2][200001];
struct node{
int id,dis;
bool operator <(const node& A)const{
return dis>A.dis;
}
};
priority_queue<node>q;
void dij(int s){
memset(dis,0x3f,sizeof dis);
dis[s]=0;
q.push({s,dis[s]});
while(!q.empty()){
node u=q.top();
q.pop();
if(dis[u.id]!=u.dis){
continue;
}
for(int i:e[u.id]){
if(dis[i]>dis[u.id]+1){
dis[i]=dis[u.id]+1;
q.push({i,dis[i]});
}
}
}
}
struct node_{
int id,dis;
bool operator <(const node_ &A)const{
return dis<A.dis;
}
}no[200001];
signed main(){
// freopen("Fate9.in","r",stdin);
int n,m,s,t;
scanf("%lld %lld %lld %lld",&n,&m,&s,&t);
for(int i=1;i<=m;++i){
int u,v;scanf("%lld %lld",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
dij(s);
for(int i=1;i<=n;++i){
no[i].id=i;
no[i].dis=dis[i];
}
sort(no+1,no+n+1);
f[0][s]=1;
for(int k=0;k<=1;++k){
for(int i=1;i<=n;++i){
for(int j:e[no[i].id]){
if(dis[j]==dis[no[i].id]+1){
f[k][j]+=f[k][no[i].id];
f[k][j]%=p;
}
if(k==0 and dis[no[i].id]+1==dis[j]+1){
f[1][j]+=f[0][no[i].id];
f[1][j]%=p;
}
}
}
}
printf("%lld",f[1][t]%p);
}
B.EVA
首先,把区间左端点放在一条鱼身上一定比较优,考虑到这个题 \(n\) 不是很大,可以枚举一遍左端点放在哪条鱼上.
其次,对于其他的鱼,可以考虑用相对速度算出它和当前鱼的相遇和离开时间,相遇时加上贡献,离开时减去贡献,计算途中最大值即可.
需要注意的是 \(v_{i}=v_{j}\) 时这么干会除以零,因为相对静止所以遇到这样的鱼直接在最初判一下就行了.
#include<bits/stdc++.h>
using namespace std;
const long double eps=1e-7;
int n,a,ans;
struct fish{
int w,x,v;
}f[3001];
int main(){
scanf("%d %d",&n,&a);
for(int i=1;i<=n;++i){
scanf("%d %d %d",&f[i].w,&f[i].x,&f[i].v);
}
for(int i=1;i<=n;++i){
map<double,int>mp;
int res=0;
for(int j=1;j<=n;++j){
if(f[i].v==f[j].v){
if(f[j].x>=f[i].x and f[j].x-f[i].x<=a){
res+=f[j].w;
}
}
else{
double l=(f[i].x-f[j].x)*1.0/(f[j].v-f[i].v);
double r=(f[i].x-f[j].x+a)*1.0/(f[j].v-f[i].v);
if(r-l<eps) swap(l,r);
if(r>=0){
l=max(l,0.0);
mp[l]+=f[j].w;
mp[r+eps]-=f[j].w;
}
}
}
ans=max(ans,res);
for(auto i=mp.begin();i!=mp.end();i++){
res+=i->second;
ans=max(ans,res);
}
}
printf("%d\n",ans);
}
C.嘉然登场
考虑一种策略:每次在插入 \(x\) 时,首先把所有 \(\ge k-x\) 的数全部放进去(也就是从大到小放),会发现,放完了之后,现在没放的数都是 \(i+x\lt k\) 的,因此全都不合法,而我们已经放入的数全部都是合法的.
新放的数不能与任何一个已经放过的 \(\le \lfloor\frac{k}{2}\rfloor\) 的数相邻,因此考虑插空算方案书,乘法原理算一下即可.
(\(e\) 是空位数量)
\]
\]
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int p=998244353;
int n,m,ans=1;
int a[200001],inv[200001];
signed main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>a[i];
}
sort(a+1,a+n+1);
int l=1,r=n;
for(int i=1;i<=n;++i){
ans=ans*(i-2*(l-1))%p;
if(a[l]+a[r]>=m){
r--;
}
else{
l++;
}
}
inv[0]=inv[1]=1;
for(int i=2;i<=n;++i){
inv[i]=(p-p/i)*inv[p%i]%p;
}
a[0]=a[n+1]=-1;
int iv=1,cnt=1;
for(int i=1;i<=n+1;++i){
if(a[i]!=a[i-1]){
ans=ans*iv%p;
iv=cnt=1;
}
else{
cnt++;
iv=iv*inv[cnt]%p;
}
}
cout<<ans<<endl;
}
D.Clannad

暑假集训CSP提高模拟11的更多相关文章
- JZOJ 【NOIP2016提高A组集训第16场11.15】兔子
JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3 ...
- JZOJ 【NOIP2016提高A组集训第16场11.15】SJR的直线
JZOJ [NOIP2016提高A组集训第16场11.15]SJR的直线 题目 Description Input Output Sample Input 6 0 1 0 -5 3 0 -5 -2 2 ...
- 【NOIP2015模拟11.5】JZOJ8月5日提高组T2 Lucas的数列
[NOIP2015模拟11.5]JZOJ8月5日提高组T2 Lucas的数列 题目 PS:\(n*n*T*T<=10^{18}\)而不是\(10^1*8\) 题解 题意: 给出\(n\)个元素的 ...
- 【NOIP2015模拟11.5】JZOJ8月5日提高组T1 俄罗斯套娃
[NOIP2015模拟11.5]JZOJ8月5日提高组T1 俄罗斯套娃 题目 题解 题意就是说 将1~\(n\)排列,问有多少种方案使得序列的逆序对个数小于\(k\) 很容易想到DP 设\(f[i][ ...
- 【NOIP2015模拟11.2晚】JZOJ8月4日提高组T2 我的天
[NOIP2015模拟11.2晚]JZOJ8月4日提高组T2 我的天 题目 很久很以前,有一个古老的村庄--xiba村,村子里生活着n+1个村民,但由于历届村长恐怖而且黑暗的魔法统治下,村民们各自过着 ...
- 【NOIP2015模拟11.4】JZOJ2020年8月6日提高组T2 最优交换
[NOIP2015模拟11.4]JZOJ2020年8月6日提高组T2 最优交换 题目 题解 题意 有一个长度为\(n\)的正整数 最多可以进行\(k\)次操作 每次操作交换相邻两个位置上的数 问可以得 ...
- 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划
[NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ...
- 【NOIP2015模拟11.5】JZOJ8月5日提高组T3 旅行
[NOIP2015模拟11.5]JZOJ8月5日提高组T3 旅行 题目 若不存在第\(k\)短路径时,输出"Stupid Mike" 题解 题意 给出一个有\(n\)个点的树 问这 ...
- 2015UESTC 暑假集训总结
day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...
- STL 入门 (17 暑假集训第一周)
快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...
随机推荐
- JuiceFS 直连 NFS 新功能介绍,赋能 NAS 进行 AI 训练
NAS 通过提供多用户网络数据存取服务,极大地简化了数据共享和管理.而 NFS 作为实现这种共享的一种主流协议,尽管广泛应用,但在处理复杂的 AI 训练场景时常常受限于其性能和一致性问题. Juice ...
- 入门Vue+.NET 8 Web Api记录(一)
做自己感觉有意思的或者能解决自己需求的项目作为入门,我觉得是有帮助的,不会觉得那么无聊. 一个最简单的前后端分离项目应该是怎么样的? 我觉得就是前端有个按钮,点击向后端发送一个get请求,获取到数据后 ...
- 自写ApiTools工具,功能参考Postman和ApiPost
近日在使用ApiPost的时候,发现新版本8和7不兼容,也就是说8不支持离线操作,而7可以. 我想说,我就是因为不想登录使用才从Postman换到ApiPost的. 众所周知,postman时国外软件 ...
- layui下拉框的数据如何直接从数据库提取(动态赋值)
代码说明部分 第一步:先把layui官方给的模板粘到自己的前端注:下面的代码是我直接从layui官网粘过来的 <div class="layui-form-item"> ...
- 如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
目录 前置步骤 环境搭建 创建容器组 在系统任意位置创建一个文件夹 创建docker-compose.yaml 启动 Halo 服务 配置反向代理以及域名解析 Halo初始化页面. 更新新版本的hal ...
- 【Java】树状节点结构的数据
数据库的菜单,权限表是具有多层级结构,有ID和PARENT_ID两个关键性的字段 通过PARENT_ID和ID相等构建层级结构: 然后需要在Java中构建出层级的数据结构,然后输出成JSON返回给前端 ...
- python高性能计算:cython使用openmp并行(示例)
y.pyx import cython from cython import parallel from cython.parallel import prange cdef int i cdef i ...
- 深度学习需要float64精度吗 —— 为什么各大深度学习框架均不支持float64的深度学习运算呢 —— 商用NVIDIA显卡的float64性能是否多余呢
首先要知道这么几个事实,也是交代一下本文要讨论的问题的背景: 各大深度学习框架均支持float64类型的简单运算,但是均不支持float64的深度学习的运算操作: 作为深度学习运行的加速设备,各种GP ...
- Apache DolphinScheduler用户线上Meetup火热来袭!
Apache DolphinScheduler 社区 8 月用户交流会精彩继续!本次活动邀请到老牌农牧产品实业集团铁骑力士架构工程师,来分享Apache DolphinScheduler在现代农牧食品 ...
- 利用Linux系统提供的和调度器相关的接口让进程或线程对某个处理器进行绑定
目录 设置进程与CPU的亲和性 设置线程与CPU的亲和性 设置进程与CPU的亲和性 taskset命令允许你查看或设置运行中的进程的CPU亲和性(即该进程可以在哪些CPU上运行). 要将一个已经运行的 ...