AtCoder Beginner Contest 374(D-E)

news/2024/10/8 19:25:59

A-C:

惯例是宝宝题,会打暴力就能过哈

D:

其实也是暴力dfs,有一个double打错成int(我是猪鼻),卡了我很久

#include<bits/stdc++.h>
using namespace std;const int maxn = 1e3 + 10,eps=1e-7;
int n,s,t;
bool vis[10];
double sum=1e8;
struct Node{double x,y,x1,y1;
}a[maxn];
double dis(double x,double y,double x1,double y1){return sqrt(1.0*(x-x1)*(x-x1)+1.0*(y-y1)*(y-y1));
}
void dfs(double sm,int x,int y){int cnt=0;for(int i=1;i<=n;i++){if(!vis[i]){vis[i]=1;double tmp=dis(a[i].x,a[i].y,x,y);dfs(sm+tmp,a[i].x1,a[i].y1);tmp=dis(a[i].x1,a[i].y1,x,y);dfs(sm+tmp,a[i].x,a[i].y);vis[i]=0;}else cnt++;}if(cnt==n){if(sm-sum<eps)sum=sm;return;}
}
signed main(){cin>>n>>s>>t;double ans=0;for(int i=1;i<=n;i++){double x,y,x1,y1;cin>>x>>y>>x1>>y1;ans+=dis(x,y,x1,y1);a[i].x=x,a[i].y=y,a[i].x1=x1,a[i].y1=y1;}for(int i=1;i<=n;i++){vis[i]=1;double tmp=dis(0,0,a[i].x,a[i].y);dfs(tmp,a[i].x1,a[i].y1);tmp=dis(0,0,a[i].x1,a[i].y1);dfs(tmp,a[i].x,a[i].y);vis[i]=0;}ans=ans*1.0/t+sum*1.0/s;printf("%.7lf",ans);
}

E:

一开始以为是dp想了很久想不通。后来才发现是经典二分+DP。不过check部分还是要思考一下,要求生产数量大于mid在最优情况下能否实现。一种机器严格优于另一种机器是在\(A_i*B_i\)的条件下才会具备的,在这个结论下我们也会思考去先求出最大可取值k再暴力枚举剩下的部分。
这个做法是过不了hack数据的,因为我们并不能直接枚举剩余部分,剩余部分其实是不确定的(可能只取k-1然后再枚举取AB更优),所以做法最终为枚举剩余部分(最多只有ai或者bi个,因为超过一定换成更优的)用某个机器生产,剩下的用另一个机器生产的最小值。
代码很丑,建议看官解代码

#include<bits/stdc++.h>
#define fi first
#define se second
#define mkp make_pair
#define pii pair<int,int>
#define int long long
using namespace std;
const int maxn=200;
int a[maxn],p[maxn],b[maxn],q[maxn],n,x;
bool jud(int mid){int sum=0;for(int i=1;i<=n;i++){int k=mid/(a[i]*b[i]);int res=mid-k*a[i]*b[i];int ans=1e18,ans2=1e18;int tte=0;for(int j=0;j<=b[i];j++){for(int m=0;m<=a[i];m++){if(a[i]*j+b[i]*m>=res)ans=min(ans,p[i]*j+m*q[i]);}}tte=ans+k*p[i]*b[i];if(k>0){res=mid-(k-1)*a[i]*b[i];for(int j=0;j<=b[i];j++){for(int m=0;m<=a[i];m++){if(a[i]*j+b[i]*m>=res)ans2=min(ans2,p[i]*j+m*q[i]);}}tte=min(ans2+(k-1)*p[i]*b[i],tte);}sum+=tte;//if(mid==4)cout<<p[i]<<' '<<sum<<endl;}if(sum<=x)return 1;else return 0;
}
signed main(){cin>>n>>x;for(int i=1;i<=n;i++){cin>>a[i]>>p[i]>>b[i]>>q[i];int v1=b[i]*p[i],v2=a[i]*q[i];if(v1>v2)swap(a[i],b[i]),swap(p[i],q[i]);}int l=0,r=1e9+7,mid=(l+r+1)/2;while(l<r){if(jud(mid))l=mid;else r=mid-1;mid=(l+r+1)/2;}cout<<mid<<endl;
}

F:

DP吧。不会

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/69114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

C#联合Visionpro编程学习记录,视觉中需要考虑旋转中心工况的计算方法探讨

一、考虑旋转中心的工况解法, 1,视觉中引导定位或者对位贴合时,机械手或者xyzr轴上手爪中心和末端轴中心不同轴时,就要考虑旋转中心问题; 2,如果设备的CT要求没有很苛刻,可以采用2次拍照的方案解决,1次拍照后纠偏角度,然后在纠正角度后的位置2次拍照纠正x、y偏差;看下…

海外模组联网非常难?不往忘了APN配置…

​除了中国之外,国外的4G信号都比较差劲。 做海外的设备,如果忽视了射频的信号质量,肯定是要吃大亏的! 所以,海外模组的联网问题,会比国内要多不少。 客户在实际应用中或多或少都会遇到:网络相关问题:例如:连不上网,APN不会配置,APN没有配置,当地信号差… 软件升级…

轻松上云怎么操作?IoT_CLOUD之中移OneNET

​最近来了很多新朋友,也经常被问:可以多讲些云平台的操作吗?当然可以!文末留言你想要了解的云平台,优先安排~ 接下来,本文将以Air780E+LuatOS作为示例,教你使用合宙IoT_CLOUD连接中移OneNET物联网云平台。一、IoT_CLOUD简1.1 IoT_CLOUD特色简介 IoT_CLOUD——是合宙专门…

实验2 C语言分支与循环基础应用编程-1

任务一#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 #define N1 397 #define N2 476 #define N3 21int main() {int cnt;int random_major, random_no;srand(time(NULL)); // 以当前系统时间作为随机种子cnt = 0;while(cnt &…

面试-前端基础速刷-Vue

1. Vue中computed和watch的区别 两者用途不同啊!computed用于计算产生新的数据,watch用于监听现有数据。 computed有缓存,methods没有缓存。 computed有点儿像工厂模式(产生新的东西),watch像发布订阅模式。(是我目前的知识盲区) 2. Vue组件通讯有几种方式,尽量全面❗…

宝塔平替:1Panel-新一代的 Linux 服务器运维管理面板(附优惠码/推荐码)

什么是1Panel 1Panel是一款开源,现代化的新一代的 Linux 服务器运维管理面板!1Panel可以帮你实现的功能: 高效管理:用户可以通过 Web 图形界面轻松管理 Linux 服务器,实现主机监控、文件管理、数据库管理、容器管理等功能; 快速建站:深度集成开源建站软件 WordPress 和 …

大模型应用开发初探 : 基于Coze创建Agent

Coze(扣子)是字节跳动公司开发的新一代AI应用开发平台,使用这个AI应用开发平台,无论你是否有编码基础,都可以快速搭建基于大语言模型的各类AI Bot,还可以将Bot发布到其他渠道。对于一个AI Agent而言,最重要的能力就是任务规划、调用工具、知识库 和 记忆能力,而这些能力…

了解final关键字在Java并发编程领域的作用吗?

在Java并发编程领域,final关键字扮演着一个至关重要的角色。虽然很多同学熟悉final用于修饰变量、方法和类的基本用法,但其在并发环境中的应用和原理却常常被忽视。final关键字不仅仅是一个简单的修饰符,它在多线程编程中确保对象状态的可见性和不变性,这对于构建线程安全的…