ホームページ php教程 php手册 uva10012 はあなたが思っているほど単純ではありません

uva10012 はあなたが思っているほど単純ではありません

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

初めてこの質問をしたとき、最初のアイデアは、すべての円を配置し、前の円に接するように新しい円を配置し、最終的に最小サイズを取得することでした。バックトラッキングによる長方形の。 10 分以上編集した後、結果は WA になりました。しばらく考えた後、問題は前の円に接しているだけではいけないことがわかりました (最初の円の半径が非常に大きい場合)。 、100、2 番目の円は非常に小さい、半径は 1、3 番目の円も非常に大きく、半径も 100 です。3 番目の円を配置するとき、2 番目の円に接していれば、間違いなく最初の円と交差することは許可されていません)。それからコードを修正し始めたところ、さまざまなエラーが発生し、断続的に一晩中、朝中ずっと作業を続けました。

最初に考えるべきことは、円を配置するたびに、まず前に配置した円に接するようにし、次に、前に配置した円と交差するかどうかを判断し、交差しない場合は決定する必要があるということです。 、これは、これを置くことが正しく、最も距離を節約することを意味します。任意の円がそれと交差する場合、それは前の円に接することができないことを意味します。次に、別の円を前に押して前の円に接するようにします。円が他の円に接しているかどうかを判断します。 。 。それらが交差するかどうかを判断するために、各円の中心位置を格納するために center 配列が追加されます。ここまでの考え方は非常に正しく明確でしたが、そこで3つの「和」のポイントに出会いました。

WA1: 長方形の最小サイズを判断する場合、最後の円の右端の位置は使用できません。最後の円は非常に小さい可能性があり、その右端の位置は長方形の右端の位置ほど適切ではないためです。前の円の辺の位置が遠いので、代わりに各円の中心位置+半径の最大値が長方形の最小サイズとして決定されます。

WA2: 最初のいくつかの円を配置するときは、円の中心位置、つまり円の半径が 0 未満にならないように注意してください。たとえば、最初の円の半径が 1 で、2 番目の要素の半径が 100 の場合、2 番目の要素を配置しても、円の左側が長方形のボックスの壁を超えるため、最初の円に接することができません。 !

WA3: main 関数の 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;  
}
ログイン後にコピー

[関連チュートリアルの推奨事項]

1. 入門からマスターまでの PHP プログラミングに関する完全なビデオチュートリアル

2. 🎜>初心者からマスターまでの php

3.

ブートストラップ チュートリアル

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Acer Care Center サービスはまだ初期化中です [修正済み] Acer Care Center サービスはまだ初期化中です [修正済み] Mar 16, 2024 am 10:55 AM

この記事では、Windows PC で Acer Care Center サービスの初期化エラー メッセージが表示される問題を解決する方法を説明します。 AcerCareCenter アプリが適切に起動できない場合、通常はアプリが破損しているか、古いか、他のソフトウェアと競合していることが原因です。 Acer Care Center サービスがまだ初期化中であるエラーを修正する Windows 11/10 PC で「AcerCare Center サービスがまだ初期化中です」エラー メッセージが表示された場合は、次の提案に従って問題を解決してください。 ACCStd.exe プロセスを再起動する AcerCareCenter を管理者として実行する ウイルス対策ソフトウェアを一時的に無効にするソフトウェア クリーン ブート ステータスを確認する Acer Care を再インストールする サポートに問い合わせる

JavaのFile.length()関数を使用してファイルのサイズを取得します。 JavaのFile.length()関数を使用してファイルのサイズを取得します。 Jul 24, 2023 am 08:36 AM

ファイルのサイズを取得するには、Java の File.length() 関数を使用します。ファイル操作を扱うとき、ファイル サイズは非常に一般的な要件です。Java では、ファイルのサイズを取得するための非常に便利な方法、つまり length( ) File クラスのメソッド。この記事では、このメソッドを使用してファイルのサイズを取得する方法と、対応するコード例を紹介します。まず、サイズを取得したいファイルを表す File オブジェクトを作成する必要があります。 File オブジェクトを作成する方法は次のとおりです: Filef

PHPでint型をbytesに変換する方法を詳しく解説 PHPでint型をbytesに変換する方法を詳しく解説 Mar 06, 2024 pm 06:18 PM

PHPでint型をbyte型に変換する方法を詳しく解説 PHPでは、ネットワークデータ送信やファイル処理、暗号化アルゴリズムなどを扱う場合など、整数型(int)をバイト型(Byte)に変換する必要が生じることがよくあります。 。この記事では、int型をbyte型に変換する方法と具体的なコード例を詳しく紹介します。 1. int 型と byte の関係 コンピュータ分野では、基本データ型 int は整数を表しますが、byte (バイト) はコンピュータの記憶単位で、通常は 8 ビットのバイナリデータです

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? Feb 28, 2024 pm 03:12 PM

jQueryでPUTリクエストメソッドを使用するにはどうすればよいですか? jQuery で PUT リクエストを送信する方法は、他のタイプのリクエストを送信する方法と似ていますが、いくつかの詳細とパラメータ設定に注意する必要があります。 PUT リクエストは通常​​、データベース内のデータの更新やサーバー上のファイルの更新など、リソースを更新するために使用されます。以下は、jQuery の PUT リクエスト メソッドを使用した具体的なコード例です。まず、jQuery ライブラリ ファイルが含まれていることを確認してから、$.ajax({u

double型変数をint型に変換するC++プログラム double型変数をint型に変換するC++プログラム Aug 25, 2023 pm 08:25 PM

C++ では、int 型の変数は正または負の整数値のみを保持でき、10 進数値を保持できません。この目的に使用できる float 値と double 値があります。 double データ型は、小数点以下 7 桁までの小数を格納するために作成されました。整数から double データ型への変換は、コンパイラによって自動的に実行することも (「暗黙的」変換と呼ばれます)、プログラマがコンパイラに明示的に要求することもできます (「明示的」変換と呼ばれます)。次のセクションでは、さまざまな変換方法について説明します。暗黙的な変換 コンパイラは暗黙的な型変換を自動的に実行します。これを実現するには、浮動小数点型と整数型の 2 つの変数が必要です。浮動小数点値または変数を整数変数に代入するだけでは、コンパイラが他のすべてのことを処理します。

SpringBoot2のPUTリクエストでパラメータが受け取れない問題の解決方法 SpringBoot2のPUTリクエストでパラメータが受け取れない問題の解決方法 May 20, 2023 pm 08:38 PM

HiddenHttpMethodFilterhtml のフォーム フォームは GET リクエストと POST リクエストのみをサポートしますが、DELETE や PUT などのメソッドはサポートされていません。Spring 3 では、これらのリクエストを標準の http メソッドに変換できるフィルタが追加されているため、GET、POST、PUT、および DELETE リクエストはサポートされました。 @BeanpublicFilterRegistrationBeantestFilterRegistration3(){FilterRegistrationBeanregistration=newFilterRegistrationBea

int32の値の範囲はどれくらいですか? int32の値の範囲はどれくらいですか? Aug 11, 2023 pm 02:53 PM

int32 の値の範囲は、-2 の 31 乗から 2 の 31 乗 - 1、つまり -2147483648 ~ 2147483647 です。 int32 は符号付き整数型です。つまり、正の数、負の数、ゼロを表現できます。1 ビットを符号ビットの表現に使用し、残りの 31 ビットは数値の表現に使用されます。符号ビットを表すために 1 ビットが使用されるため、int32 の有効ビット数は 31 です。

int は何バイトを占めますか? int は何バイトを占めますか? Jan 22, 2024 pm 03:14 PM

int 型が占めるバイト数は、プログラミング言語やハードウェア プラットフォームによって異なる場合があります。詳細な紹介: 1. C 言語では、int 型は通常 2 バイトまたは 4 バイトを占有します。 32 ビット システムでは、int 型は 4 バイトを占有しますが、16 ビット システムでは、int 型は 2 バイトを占有します。 64 ビット システムでは、int 型は 8 バイトを占有する可能性があります; 2. Java では、int 型は通常 4 バイトを占有しますが、Python では int 型にはバイト制限がなく、自動的に調整できます。

See all articles