uva10012 はあなたが思っているほど単純ではありません
初めてこの質問をしたとき、最初のアイデアは、すべての円を配置し、前の円に接するように新しい円を配置し、最終的に最小サイズを取得することでした。バックトラッキングによる長方形の。 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; }
[関連チュートリアルの推奨事項]
3.
ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック








![Acer Care Center サービスはまだ初期化中です [修正済み]](https://img.php.cn/upload/article/000/465/014/171055772117927.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
この記事では、Windows PC で Acer Care Center サービスの初期化エラー メッセージが表示される問題を解決する方法を説明します。 AcerCareCenter アプリが適切に起動できない場合、通常はアプリが破損しているか、古いか、他のソフトウェアと競合していることが原因です。 Acer Care Center サービスがまだ初期化中であるエラーを修正する Windows 11/10 PC で「AcerCare Center サービスがまだ初期化中です」エラー メッセージが表示された場合は、次の提案に従って問題を解決してください。 ACCStd.exe プロセスを再起動する AcerCareCenter を管理者として実行する ウイルス対策ソフトウェアを一時的に無効にするソフトウェア クリーン ブート ステータスを確認する Acer Care を再インストールする サポートに問い合わせる

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

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

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

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

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

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

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