首页 > 其他分享 >二进制枚举

二进制枚举

时间:2024-10-10 20:02:26浏览次数:1  
标签:pii 二进制 double second long int 枚举 first

实现\(N*(2^N)\)的暴力枚举

核心代码:

int n;
for(int i=0;i<(1<<n);i++){
  for(int j=0;j<i;j++){
    if(i&(1<<j)) //可以枚举2^n的所有情况
    else //如果有两种枚举(比如起点到终点 、终点到起点)
  }
}

例题:https://atcoder.jp/contests/abc374/tasks/abc374_d
\(O(N!*2^N)\)

#include<bits/stdc++.h>
#define endl '\n'
#define lowbit(x) (x&-x)
using namespace std;
const double pi=acos(-1);
typedef pair<int,int> pii;
long double dis(pii l,pii r){
	long double dx=(r.first-l.first)*(r.first-l.first);
	long double dy=(r.second-l.second)*(r.second-l.second);

	return sqrtl(dx+dy);
}

void solve(){
	int n,s,t;cin>>n>>s>>t;
	vector<pii> a(n),b(n);
	vector<int> p;
	for(int i=0;i<n;i++){
		cin>>a[i].first>>a[i].second>>b[i].first>>b[i].second;	
		p.push_back(i);
	}
	long double ans=1e18;
	do{
		for(int i=0;i<(1<<n);i++){
			long double res=0.0;
			pii tem={0,0};
			for(int j=0;j<n;j++){
				int idx=p[j];
				if(i&(1<<j)){
					res+=(dis(tem,a[idx])/(long double)s);
					res+=(dis(a[idx],b[idx])/(long double)t);
					tem=b[idx];
				}
				else{
					res+=(dis(tem,b[idx])/(long double)s);
					res+=(dis(b[idx],a[idx])/(long double)t);
					tem=a[idx];
				}
			}
			ans=min(ans,res);
		}
	}while(next_permutation(p.begin(),p.end()));
	printf("%.20Lf\n",ans);
}
signed main(){
	//ios::sync_with_stdio(false); cin.tie(nullptr);
	int t=1;
	//cin>>t;
	while(t--) solve();
	return 0;
}

标签:pii,二进制,double,second,long,int,枚举,first
From: https://www.cnblogs.com/TaopiTTT/p/18457018

相关文章

  • USB3.0 枚举过程
    USB3.0枚举是指主机和设备之间通过USB协议进行初始化和通信配置的过程。在USB3.0中,枚举过程的主要步骤包括电气连接建立、链路训练(LTSSM)、设备描述符读取等。以下是USB3.0枚举的详细过程:1设备连接与电源管理当USB设备插入USB3.0端口时,以下步骤会开始:供电:主机通过VBUS线为......
  • 【C语言】输出数据的二进制存储形式
        说在前面:是一个C语言新手,很新的新手,在这个专栏记录一些探索过程    今天学习中学到类型转换,将int和short类型赋值给char类型变量时,因为想要清楚看到隐式转换的结果,产生了写一个东西来输出数据在计算机中的二进制存储形式的想法,以下为尝试过程一、首先想......
  • Java中枚举的学习
    枚举目录枚举枚举的定义声明枚举枚举类EnumMap类EnumSet类枚举使用场景枚举的定义Java枚举是一个特殊的类,一般表示一组常量,比如一年的4个季节,一年的12个月份,一个星期的7天,方向有东南西北等。Java枚举类使用enum关键字来定义,各个常量使用逗号,来分割。声明枚举......
  • [kubernetes]二进制方式部署单机k8s-v1.30.5
    前言之前在单机测试k8s的kind最近故障了,虚拟机运行个几分钟后就宕机了,不知道是根因是什么,而且kind部署k8s不太好做一些个性化配置,干脆用二进制方式重新搭一个单机k8s。因为是用来开发测试的,所以control-panel就不做高可用了,etcd+apiserver+controller-manager+scheduler都只有一......
  • 使用ValueConverters扩展实现枚举控制页面的显示
    1、ValueConverters本库包含了IValueConverter接口的的最常用的实现,ValueConverters用于从视图到视图模型的值得转换,某些情况下,可用进行反向转换。里面有一些抽象类、模板类的定义,可以继承这些类实现一些自己想要实现的功能,方便快速。像BoolToValueConverterBase、ValueToBoolCon......
  • [题解][洛谷P1633] 二进制
    题目描述有三个整数A,B,C,构造三个整数X,Y,Z满足:1.A,B,C在二进制下1的数量分别与X,Y,Z相等;2.X,Y,Z在二进制下的长度不超过A,B,C的最大长度;3.X+Y=Z。输出Z的最小值,若不存在Z,输出-1。题意分析首先考虑X,Y在什么情况下会使1的数量发生改变。设x,y,z分别表示X,Y,Z中1的数量,则......
  • C--联合和枚举
    欢迎各位看官!如果您觉得这篇文章对您有帮助的话欢迎您分享给更多人哦感谢大家的点赞收藏评论感谢各位看官的支持!!!一:联合体1.1:联合体类型的声明首先:像结构体一样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。但是编译器只为最大的成员分配足够的......
  • 自定义类型:结构体,枚举,联合
    文章目录结构体**结构体声明****结构体的基础知识**结构体变量的定义和初始化结构体内存对齐修改默认对齐数百度笔试题:结构体传参位段什么是位段位段的内存分配3.2剩余空间利用的问题位段的跨平台问题总结:位段的应用枚举枚举类型的定义枚举的优点枚举的使用联合(共......
  • 2289 马拉松 暴力枚举 曼哈顿距离
    解决思路 计算总距离:首先计算贝茜不跳过任何检查点的总行进距离。 尝试跳过每个检查点:对于每个可以跳过的检查点,计算跳过该检查点后的行进距离,并记录最小的行进距离。 输出结果:输出最小的行进距离。#include<bits/stdc++.h>#definelllonglongusingnamespac......
  • 11752 糖葫芦 模拟 排序 枚举
    解决思路 读取输入:读取糖果的数量 n 和每个糖果距左边第一颗糖果的距离。 排序:对糖果的距离进行排序。 枚举分割点:枚举两个分割点,将糖果分成三段,计算每段的长度,并求出总长度的最小值。#include<bits/stdc++.h>#definelllonglongusingnamespacestd;cons......