题意:

  给你不超过8条一端在圆心的半径,求他们组成的凸包的最大面积.

SOL:

  正解怎么搞啊不会啊...然后昨天毛爷爷刚讲过模拟退火...那么就打一个吧...

  然后就T了,不过三角形的部分分妥妥的...

  然后在自信的协助下被他改了改参数然后过了九个点...(对着数据调参也是醉了...

  剩下一个点感觉没法搞啊QAQ...差太多了...感觉退完火爬爬山应该会很兹瓷...

90分code:

/*==========================================================================
# Last modified:
# Filename: .cpp
# Description:
==========================================================================*/
#define me AcrossTheSky
#include <cstdio>
#include <cmath>
#include <ctime>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #include <set>
#include <map>
#include <stack>
#include <queue>
#include <vector> #define lowbit(x) (x)&(-x)
#define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++)
#define FORP(i,a,b) for(int i=(a);i<=(b);i++)
#define FORM(i,a,b) for(int i=(a);i>=(b);i--)
#define ls(a,b) (((a)+(b)) << 1)
#define rs(a,b) (((a)+(b)) >> 1)
#define getlc(a) ch[(a)][0]
#define getrc(a) ch[(a)][1] #define maxn 10
#define maxm 100000
#define limm 1e-6
#define pi acos(-1)
#define _e 2.718281828459
#define INF 1070000000
using namespace std;
typedef long long ll;
typedef unsigned long long ull; template<class T> inline
void read(T& num) {
bool start=false,neg=false;
char c;
num=0;
while((c=getchar())!=EOF) {
if(c=='-') start=neg=true;
else if(c>='0' && c<='9') {
start=true;
num=num*10+c-'0';
} else if(start) break;
}
if(neg) num=-num;
}
/*==================split line==================*/
int a[maxn],temp[maxn],tmp[maxn];
double angle[maxn];
int n;
double ans=0;
bool vis[maxn];
set<int> s;
int cmp(int x,int y){return x>y;}
double getang(double x){ return x/180*pi; }
double calc(int ord,double ang,int m){
return temp[ord]*temp[ord%m+1]*sin(getang(ang))/2;
}
int getposb(double c,double b){
double tttt=exp(c/b);
return tttt;
}
void work(int m){
double aaa=360.0/m;
double sum=0; FORP(i,1,m) { angle[i]=aaa; sum+=calc(i,angle[i],m); }
//angle[m]=360-aaa;
//sum+=calc(m,angle[m],m);
double maxx=sum;
//ans=max(ans,sum);
double T=100;
if (n < 4) T = 1000;
while (fabs(T-0)>1e-5){
if (maxx < 94*ans/100) return;
int pos=rand()%m+1,next=pos%m+1;
double ttemp=calc(pos,angle[pos],m)+calc(next,angle[next],m); ll cap=trunc(max(angle[pos],angle[next])*100000000/T);
double change=(rand()%cap)*T/100000000; double dx,dy;
if (angle[pos]-change<0) dx=angle[pos]+change,dy=angle[next]-change;
else dx=angle[pos]-change,dy=angle[next]+change; double delta=calc(pos,dx,m)+calc(next,dy,m)-ttemp;
if (delta>0){
sum+=delta;
angle[pos]=dx,angle[next]=dy;
}
else{
double posb=getposb(delta,ans*T);
int xxx=10000000/trunc(T);
int rp=rand()%xxx;
if ((double)rp*T/100000000.0<posb) {
sum+=delta;
angle[pos]=dx,angle[next]=dy;
}
}
if (sum>ans) {
//FORP(i,1,m) printf("%d ",temp[i]);
//cout << endl;
//FORP(i,1,m) printf("%lf ",angle[i]);
//cout << endl;
//printf("%lf\n",sum);
ans=sum;
}
maxx=max(maxx,sum);
if (n >= 4) T*=0.89;
else T *= 0.999;
}
if (sum>ans) ans=sum;
}
int fpow(int s,int m){
int ret=1;
for (;m;m>>=1,s=s*s) if (m&1) ret*=s;
return ret;
}
void dfs(int x,int m,int tot){
if (x==m+1) { work(m);work(m);
work(m);work(m);
return;
}
FORP(i,1,n)
if (!vis[i]) {
vis[i]=true; temp[x]=a[i]; dfs(x+1,m,tot*10+i); vis[i]=false;
}
}
int main(){
srand(time(0));
freopen("yist.in","r",stdin);
freopen("yist.out","w",stdout);
read(n); bool flag=true;
if (n==2) {printf("0\n"); return 0;}
FORP(i,1,n) read(a[i]);
FORP(i,1,n) { if (i>1 & a[i]!=a[i-1]) flag=false; }
if (flag){
if (n==3) printf("%.8lf\n",a[1]*sqrt(3)*(a[1]+a[1]/2.0)/2.0);
else printf("%.8lf",(double)a[1]*a[1]*sin(2*pi/n)*n/2.0);
}
else{
if (n==3){
FORP(i,1,n) temp[i]=a[i];
dfs(1,n,0);
}
else{
FORP(i,3,n-1){
memset(vis,false,sizeof(vis));
//s.clear();
dfs(1,i,0);
}
memset(vis,false,sizeof(vis));
s.clear(); temp[1]=1; vis[1]=1;
dfs(2,n,0);
}
printf("%.10lf\n",ans);
}
}

无题的题 & 模拟退火...的更多相关文章

  1. [UOJ#404][CTSC2018]组合数问题(79分,提交答案题,模拟退火+匈牙利+DP)

    1.4.5.6.10都是op=1的点,除4外直接通过模拟退火调参可以全部通过. #include<cmath> #include<ctime> #include<cstd ...

  2. [模拟退火][UVA10228] A Star not a Tree?

    好的,在h^ovny的安利下做了此题 模拟退火中的大水题,想当年联赛的时候都差点打了退火,正解貌似是三分套三分,我记得上一道三分套三分的题我就是退火水过去的... 貌似B班在讲退火这个大玄学... 这 ...

  3. Codeforces Beta Round#2

    Codeforces Beta Round#2 http://codeforces.com/contest/2 A 模拟题 #include<bits/stdc++.h> using na ...

  4. CF839E Mother of Dragons 最大团 Bron-Kerbosch算法

    题意简述 给你一个\(n\)个节点的无向图\(G=\{V,E\}\)的邻接矩阵\(g\)和每个点的点权为\(s_i\),且\(\sum_{i=1}^n s_i = K\),要你求出\(\mathrm{ ...

  5. HDU 5017 Ellipsoid 模拟退火第一题

    为了补这题,特意学了下模拟退火算法,感觉算法本身不是很难,就是可能降温系数,步长等参数不好设置. 具体学习可以参见: http://www.cnblogs.com/heaad/archive/2010 ...

  6. BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】

    3680: 吊打XXX Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 3192  Solved: 1198[Sub ...

  7. 【洛谷1337】[JSOI2004] 吊打XXX(模拟退火经典题)

    点此看题面 大致题意: 一个平面上有\(n\)个点,每个点有1个权值,现在要选择平面上的一个点,使这\(n\)个点的权值乘上到达选定点的距离之和最小. 模拟退火 我们可以用模拟退火来做这道题. 先将\ ...

  8. ACM学习历程——HDU5017 Ellipsoid(模拟退火)(2014西安网赛K题)

    ---恢复内容开始--- Description Given a 3-dimension ellipsoid(椭球面) your task is to find the minimal distanc ...

  9. 模拟退火SA刷题记录

    洛谷P1337 [JSOI2004]平衡点 / 吊打XXX 基本上是照着别人的代码写的,模拟退火为什么一定能找到答案呢...迷惑,,有时间搜一搜证明啥的 sa步骤:这个是要确定一个(xi,yi)使得函 ...

随机推荐

  1. eclipse中导入jar文件的源码

    有时候想看看一个jar包的源码是怎么写的,想按Ctrl+鼠标左键点击来自动导航这时候就需要先把源码给导入到eclipse中,步骤如下:首先准备jar包和源文件包比如:

  2. 【Tomcat 6.0官方文档翻译】—— 简介

    Tomcat作为使用最多的web容器,研究其原理过程,对掌握java web开发有很重要的影响. 因此下定决心,从官方文档入手,好好学学web相关的知识. 介绍     本篇是Apache Tomca ...

  3. Java 判断整数方法

    今天写代码的时候突然想到要怎么来判断整数,然后通过判断是否是整数来处理相关的操作.开始想到了几个方法,比如百度到的 x(int) instanceof Integer,但是这样的话程序会报错,还有一个 ...

  4. hzwer模拟赛 感冒病毒

    题目描述 Description 一种感冒病毒正在学校里传播,这所学校有n个学生,m个学生社团,每个学生可能参加了多个社团,因为同一个社团的学生交流较多,所以如果一个学生感染上感冒病毒,那么他所在的社 ...

  5. 超酷jQuery进度条加载动画集合

    在丰富多彩的网页世界中,进度条加载动画的形式非常多样,有利用gif图片实现的loading动画,也有利用jQuery和CSS3实现的进度加载动画,本文主要向大家介绍很多jQuery和CSS3实现的进度 ...

  6. 如何快速上手使用STM32库函数

    一.背景 如前文所述,利用标准库函数的好处在于,可以快速开发,不用去对着数据手册,小心翼翼的一位一位的配置那些繁复的寄存器,因为这些工作意法半导体已经找了一些顶级的工程师帮你做了,杰作既是其库函数.当 ...

  7. 利用 autoconf 和 automake 生成 Makefile 文件

    一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...

  8. 探讨兼容IE低版本的PC端响应式布局

    http://www.jiangweishan.com/article/lowIeResposive.html 响应式布局,oh my god!!有点醉了,感觉是老生常谈的话题了.虽然已经谈过很多了, ...

  9. java环境配置为1.7jdk为什么cmd java -version查看版本是1.8

    记录一个小问题: 初始安装的是jdk1.8,后来项目需要要更换成jdk1.7, 因此将环境变量更改为jdk7的目录路径, 但是在cmd命令行运行java -version 发现还是jdk8 解决方法: ...

  10. shutil复制粘贴和压缩

    shutil复制粘贴和压缩 shutil 高级的文件.文件夹.压缩包处理模块 @1).将文件内容拷贝到另一个文件中 import shutil shutil.copyfileobj(open(&quo ...