I - Cloud Retainer's Game
I - Cloud Retainer's Game
传送门: I. Cloud Retainer's Game (codeforces.com)
题意:
在坐标轴上有2个边界:y=0和y=H。有n个质点(木板),m个宝物(硬币)。一个小球从(0,0)点开始移动方向为。
小球遇到木板或边界之后,y轴方向上的速度取反,即变成。
问删掉任意个质点之后,小球最多遇到多少个宝物。
附上题面下面的图片帮助理解:

解法:
移动有两个方向:分别是方向和方向,表达式分别为 \((x+y)\%2H=m\)和\((2H-x+y)\%2H=m\)
也就是说,对于特征值m的路线,可以通过木板反弹在这两个表达式切换,或者删掉木板保持表达式。
令\(dp_i\)为特征值为i的线路中遇到的宝物的最大数量。
我们可以按照x的大小从大到小往起点方向dp。(因为起点是所有路线一定经过且唯一确定的,其他点不一定是经过的,所以\(dp_0\)一定是最大的,也即答案)
对于一个木板,我们可以算出经过这个木板的两个方向的线路的特征值 \((x+y)\%2H=m1\)和\((2H-x+y)\%2H=m2\)。因为可以删或不删从而在两个方向任意选择,所以\(dp_{m1},dp_{m2}\)都应该取\(max(dp_{m1},dp_{m2})\)。
对于一个宝物,我们可以算出经过这个宝物的两个方向的线路的特征值 \((x+y)\%2H=m1\)和\((2H-x+y)\%2H=m2\)。两个线路的贡献的加一即可。
代码实现:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6+10;
signed main(){
ios::sync_with_stdio(false);
int T;cin>>T;
while(T--){
vector<array<int,3>>ve;
map<int,int>ans;
int H;cin>>H;
int n;cin>>n;
for(int i=1;i<=n;i++){
int x,y;cin>>x>>y;
ve.push_back({x,y,0});
}
int m;cin>>m;
for(int i=1;i<=m;i++){
int x,y;cin>>x>>y;
ve.push_back({x,y,1});
}
sort(ve.begin(),ve.end(),[](array<int,3>x,array<int,3>y){
return x[0]>y[0];
});
for(auto i:ve){
int x=i[0],y=i[1];
int a=(x+y)%(2*H),b=(2*H-y+x)%(2*H);
if(i[2]){
ans[a]++;
ans[b]++;
}
else {
ans[a]=ans[b]=max(ans[a],ans[b]);
}
}
cout<<ans[0]<<"\n";
}
}
I - Cloud Retainer's Game的更多相关文章
- On cloud, be cloud native
本来不想起一个英文名,但是想来想去都没能想出一个简洁地表述该意思的中文释义,所以就用了一个英文名称,望见谅. Cloud Native是一个刚刚由VMware所提出一年左右的名词.其表示在设计并实现一 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(六)
(六)在Website Cloud中添加site 1新建Website,并打开 使用前面创建的用户 newbee@waplab.com 登录租户Portal,新建一个website 新建完成后, 可以 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(五)
(五)注册Website Cloud 1 注册Website Cloud 添加Website Cloud 连接Website Cloud 注意, endpoint 是使用Management Se ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(四)
(四)搭建Website Cloud环境 1安装CONTROLLER主机 在开始安装Web site Cloud之前,读者应该对该服务的拓扑结构有个大概了解. 如图: Controller是非常重要的 ...
- 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(二)
前言 (二)建立虚拟网络环境,以及域控和DNS服务器 1搭建虚拟网络环境 在Azure上创建虚拟网络.本例选择的是东南亚数据中心.后面在创建虚机的时候,也选择这个数据中心. VNet Name: ...
- spring/spring boot/spring cloud开发总结
背景 针对RPC远程调用,都在使用dubbo.dubbox等,我们也是如此.由于社区暂停维护.应对未来发展,我们准备尝试新技术(或许这时候也不算什么新技术了吧),选择使用了spring ...
- Oracle Sales Cloud:管理沙盒(定制化)小细节2——使用对象触发器更新数字字段
在上一篇 "管理沙盒(定制化)小细节1" 的随笔中,我们使用公式法在 "业务机会" 对象(单头)上建立了 "利润合计" 字段,并将它等于 & ...
- Oracle Sales Cloud:管理沙盒(定制化)小细节1——利用公式创建字段并显示在前端页面
Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的CRM管理系统.由于 Oracle 销售云是基于 Oracle 云环境的,它与传统的管理系统相比,显著特点之一便 ...
- Oracle Sales Cloud:报告和分析(BIEE)小细节2——利用变量和过滤器传参(例如,根据提示展示不同部门的数据)
在上一篇随笔中,我们建立了部门和子部门的双提示,并将部门和子部门做了关联.那么,本篇随笔我们重点介绍利用建好的双提示进行传参. 在操作之前,我们来看一个报告和分析的具体需求: [1] 两个有关联的提示 ...
- Oracle Sales Cloud:报告和分析(BIEE)小细节1——创建双提示并建立关联(例如,部门和子部门提示)
Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的客户商机管理系统,通过提供丰富的功能来帮助提高销售效率,更好地去了解客户,发现和追踪商机,为最终的销售成交 (d ...
随机推荐
- fiddler设置自动响应
使用fiddler 设置AutoResponder 1.auto responder:自动响应器,设置并开启后将把请求接口拦截并返回 2.enable rules:开启规则,开启后规则启用 3.unm ...
- spring Security 使用
1.pom文件引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- Qt开发环境的建立
在建立开发环境之前,先来了解一下Qt是什么以及它的历史变迁.Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序, ...
- 统计包含关键字的 Key 的数量
- JAVA笔记:double四舍五入并保留两位小数的方法
1.只要输出结果 double x1 = 0.026; System.out.println(String.format("%.2f", x1)); 2.数据转换 //方案一: g ...
- deployment.yml参考
apiVersion: apps/v1kind: Deploymentmetadata: labels: com.xx.service: xxxxxxxxxxxxx name: xxxxxxxxxxx ...
- anaconda navigator启动时一直卡在 loading applications 页面解决方法
anaconda3\Lib\site-packages\anaconda_navigator\api\conda_api.py 行1364 把 data = yaml.load(f) 改为 data ...
- python菜鸟学习: 7. 购物车升级版,用户、商品信息存储,修改,新增
# -*- coding: utf-8 -*-import os'''用户入口:1. 商品信息存在文件里2. 已购商品,余额记录商家入口1. 可以添加商品,修改商品价格商品信息:commdList.t ...
- 安装并学习git的基本使用;注册Github账号,并创建仓库,编辑自我介绍,并提交commit
安装.学习.注册Git成功,也创建了仓库和自我介绍. 但Git clone没有做,再打开Git网页一直出现错误,不理解.
- Jetpack compose学习笔记之列表(布局)
一,简介 Jetpack compose中的布局主要分为Column,Row,Box. 二,Column创建的列表 Column创建list时,不管内容是在屏幕内还是屏幕外,都会将list的内容全部创 ...