Heim php教程 php手册 uva10012 不是你想象的那么简单的

uva10012 不是你想象的那么简单的

Jun 21, 2016 am 08:48 AM
center int lt put size

道题第一次做以为是一般的回溯题,最初的思路就是将各圆形全排列,放置新圆的时候让其与前一个圆相切,最后通过回溯得到矩形的最小size。十几分钟编完后结果WA,想了好一会发现问题所在,不能只让其与前一个圆相切(如果第一个圆很大,半径比方说是100,第二个圆很小,半径是1,第三个圆也很大,半径同样是100,放第三个圆的时候如果是和第二个圆相切则必定会与第一个圆相交,就不可以了)。然后就开始修改代码,然后就遇到了各种错误,断断续续地弄了一晚上加一上午。

首先想的是每次放一个圆形的时候还是先让其与前一个放置的圆相切,然后判断它与再之前放的圆是否相交,如不相交,则说明这样放是正确且最节省距离的,如果有任何一个圆与其相交,则说明不能与前一个圆相切,就再往前推一个,让其与前前个圆相切,再判断是否和别的圆相交。。。为了判断是否相交,增加了一个center数组存储各圆的圆心位置。到此思路很正确很清晰,然后遇到了三个Wa的点。

WA1:判断矩形最小size的时候不能用最后一个圆的最右侧位置了,因为有可能最后一个圆很小,其最右侧的位置还不如其前一个圆的最右侧位置远,所以改用判断各圆圆心位置+半径的最大值作为矩形的最小size。

WA2:在放置前几个圆的时候注意不能让圆的圆心位置-圆的半径<0。比如说第一个圆半径是1,第二个元半径100,放第二个元就不能让其与第一个圆相切因为那样圆的左边就超出矩形盒子的壁了!

WA3:主函数中MinL设置的太小,估计测试数据的数有很大的,题目没有说半径最大是多少,开始设的是65536,结果WA,改成DBL_MAX就AC了!!

#include#include#include#include#includeusing namespace std;  
  
int m,Put[10];          //Put[i]:放置的第i个圆的编号  
double MinL,size[10],center[10];//size[i]:编号为i的圆的半径;center[i]:放置的第i个圆的圆心位置  
bool vis[10];  
  
double getlen(int a,int b)      //计算两圆心间的距离  
{  
    return sqrt((size[a]+size[b])*(size[a]+size[b])-(size[a]-size[b])*(size[a]-size[b]));  
}  
bool isok(int a,int b)          //是否和之前放的圆相交  
{  
    for (int i=0;i<b;i++)  
    {  
        if (sqrt((center[i]-center[a])*(center[i]-center[a])+(size[Put[i]]-size[Put[a]])*(size[Put[i]]-size[Put[a]]))<(size[Put[i]]+size[Put[a]]))  
            return false;  
    }  
    return true;  
}  
void dfs(int cur)  
{  
    int i,j;  
    if (cur==m)  
    {     
        double maxsize=0;  
        for (int k=0;kmaxsize)  
                maxsize=center[k]+size[Put[k]];  
        }  
        if (maxsize<MinL)  
            MinL=maxsize;  
    }  
    else  
    {  
        for (i=0;i=0;j--)  
                {  
                    tmpl=getlen(Put[j],i);  
                    center[cur]=center[j]+tmpl;  
                    if (center[cur]-size[Put[cur]]>n;  
    while(n--)  
    {  
        cin>>m;  
        MinL=DBL_MAX;  
        memset(vis,0,sizeof(vis));  
        for (int i=0;i>size[i];  
        for (int i=0;i<m;i++)  
        {  
            Put[0]=i;  
            center[0]=size[i];  
            vis[i]=1;  
            dfs(1);  
            vis[i]=0;  
        }  
        cout<<fixed<<setprecision(3)<<MinL<<endl;  
    }  
    return 0;  
}
Nach dem Login kopieren

【相关教程推荐】

1. php编程从入门到精通全套视频教程 

2. php从入门到精通  

3. bootstrap教程 

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Der Acer Care Center-Dienst wird immer noch initialisiert [Behoben] Der Acer Care Center-Dienst wird immer noch initialisiert [Behoben] Mar 16, 2024 am 10:55 AM

Dieser Artikel hilft Ihnen bei der Lösung des Problems der Fehlermeldung bei der Initialisierung des Acer Care Center-Dienstes auf einem Windows-PC. Wenn die AcerCareCenter-App nicht ordnungsgemäß gestartet wird, liegt dies normalerweise daran, dass die App beschädigt oder veraltet ist oder mit anderer Software in Konflikt steht. Behebung des Fehlers „Der Acer Care Center-Dienst wird immer noch initialisiert“ Wenn auf Ihrem Windows 11/10-PC die Fehlermeldung „Der AcerCare Center-Dienst wird immer noch initialisiert“ angezeigt wird, verwenden Sie die folgenden Vorschläge, um das Problem zu beheben: Starten Sie den ACCStd.exe-Prozess neu. Führen Sie AcerCareCenter als Administrator aus. Deaktivieren Sie Ihr Antivirenprogramm vorübergehend Software Überprüfen Sie den Clean-Boot-Status. Installieren Sie Acer Care neu. Kontaktieren Sie den Support

Verwenden Sie die Funktion File.length() von Java, um die Größe der Datei zu ermitteln Verwenden Sie die Funktion File.length() von Java, um die Größe der Datei zu ermitteln Jul 24, 2023 am 08:36 AM

Verwenden Sie die File.length()-Funktion von Java, um die Größe einer Datei zu ermitteln. Die Dateigröße ist eine sehr häufige Anforderung beim Umgang mit Dateioperationen. Java bietet eine sehr praktische Möglichkeit, die Größe einer Datei zu ermitteln, d. h. mithilfe der Länge(. )-Methode der File-Klasse. In diesem Artikel wird erläutert, wie Sie mit dieser Methode die Größe einer Datei ermitteln und entsprechende Codebeispiele angeben. Zuerst müssen wir ein File-Objekt erstellen, um die Datei darzustellen, deren Größe wir ermitteln möchten. So erstellen Sie ein File-Objekt: Filef

Detaillierte Erläuterung der Methode zum Konvertieren des Int-Typs in Bytes in PHP Detaillierte Erläuterung der Methode zum Konvertieren des Int-Typs in Bytes in PHP Mar 06, 2024 pm 06:18 PM

Ausführliche Erläuterung der Methode zum Konvertieren des Int-Typs in Byte in PHP. In PHP müssen wir häufig den Integer-Typ (int) in den Byte-Typ (Byte) konvertieren, beispielsweise wenn es um Netzwerkdatenübertragung, Dateiverarbeitung oder Verschlüsselungsalgorithmen geht . In diesem Artikel wird detailliert beschrieben, wie der Typ int in den Typ byte konvertiert wird, und es werden spezifische Codebeispiele bereitgestellt. 1. Die Beziehung zwischen int-Typ und Byte Im Computerbereich stellt der grundlegende Datentyp int eine Ganzzahl dar, während Byte (Byte) eine Computerspeichereinheit ist, normalerweise 8-Bit-Binärdaten

Wie verwende ich die PUT-Anfragemethode in jQuery? Wie verwende ich die PUT-Anfragemethode in jQuery? Feb 28, 2024 pm 03:12 PM

Wie verwende ich die PUT-Anfragemethode in jQuery? In jQuery ähnelt die Methode zum Senden einer PUT-Anfrage dem Senden anderer Arten von Anfragen, Sie müssen jedoch auf einige Details und Parametereinstellungen achten. PUT-Anfragen werden normalerweise zum Aktualisieren von Ressourcen verwendet, beispielsweise zum Aktualisieren von Daten in einer Datenbank oder zum Aktualisieren von Dateien auf dem Server. Das Folgende ist ein spezifisches Codebeispiel, das die PUT-Anforderungsmethode in jQuery verwendet. Stellen Sie zunächst sicher, dass Sie die jQuery-Bibliotheksdatei einschließen. Anschließend können Sie eine PUT-Anfrage senden über: $.ajax({u

C++-Programm zum Konvertieren von Variablen vom Typ Double in den Typ int C++-Programm zum Konvertieren von Variablen vom Typ Double in den Typ int Aug 25, 2023 pm 08:25 PM

In C++ können Variablen vom Typ int nur positive oder negative Ganzzahlwerte enthalten; sie können keine Dezimalwerte enthalten. Hierfür stehen Float- und Double-Werte zur Verfügung. Der Datentyp double wurde erstellt, um Dezimalzahlen mit bis zu sieben Nachkommastellen zu speichern. Die Konvertierung einer Ganzzahl in einen Double-Datentyp kann automatisch vom Compiler durchgeführt werden (sogenannte „implizite“ Konvertierung) oder sie kann vom Programmierer explizit vom Compiler angefordert werden (sogenannte „explizite“ Konvertierung). In den folgenden Abschnitten werden wir verschiedene Konvertierungsmethoden behandeln. Implizite Konvertierungen Der Compiler führt implizite Typkonvertierungen automatisch durch. Um dies zu erreichen, sind zwei Variablen erforderlich – eine vom Typ Gleitkomma und die andere vom Typ Ganzzahl. Wenn wir einer Ganzzahlvariablen einfach einen Gleitkommawert oder eine Variable zuweisen, kümmert sich der Compiler um alle anderen Dinge

So lösen Sie das Problem, dass die PUT-Anfrage von SpringBoot2 keine Parameter empfangen kann So lösen Sie das Problem, dass die PUT-Anfrage von SpringBoot2 keine Parameter empfangen kann May 20, 2023 pm 08:38 PM

Das Formular in HiddenHttpMethodFilterhtml unterstützt nur GET- und POST-Anfragen, Methoden wie DELETE und PUT werden jedoch nicht unterstützt. Spring 3 fügt einen Filter hinzu, der diese Anfragen in Standard-HTTP-Methoden umwandeln kann, sodass GET-, POST-, PUT- und DELETE-Anfragen möglich sind unterstützt. @BeanpublicFilterRegistrationBeantestFilterRegistration3(){FilterRegistrationBeanregistration=newFilterRegistrationBea

Was ist der Wertebereich von int32? Was ist der Wertebereich von int32? Aug 11, 2023 pm 02:53 PM

Der Wertebereich von int32 reicht von -2 bis 31. Potenz bis 2 bis 31. Potenz minus 1, also -2147483648 bis 2147483647. int32 ist ein vorzeichenbehafteter Ganzzahltyp, was bedeutet, dass er positive Zahlen, negative Zahlen und Nullen darstellen kann. Er verwendet 1 Bit zur Darstellung des Vorzeichenbits und die restlichen 31 Bits werden zur Darstellung des numerischen Werts verwendet. Da ein Bit zur Darstellung des Vorzeichenbits verwendet wird, beträgt die effektive Anzahl der int32-Bits 31.

Wie viele Bytes belegt int? Wie viele Bytes belegt int? Jan 22, 2024 pm 03:14 PM

Die Anzahl der vom Typ int belegten Bytes kann je nach Programmiersprache und Hardwareplattform variieren. Detaillierte Einführung: 1. In der C-Sprache belegt der int-Typ normalerweise 2 Bytes oder 4 Bytes. In 32-Bit-Systemen belegt der Typ int 4 Bytes, während der Typ int in 16-Bit-Systemen 2 Bytes belegt. In einem 64-Bit-System kann der Typ int 8 Bytes belegen 2. In Java belegt der Typ int normalerweise 4 Bytes, während der Typ int in Python keine Bytebeschränkung hat und automatisch angepasst werden kann usw.

See all articles