45度の線で、C++で平面を2つの等しい重みの部分に分割できるかどうかを確認します
2D座標にn個の異なるポイント(Xi、Yi)があり、各ポイントの重みがWiであるとすると、45度の線を描画できるかどうかを確認する必要があります。両側のポイントの重みの合計が同じになるようにします。
したがって、入力が[[-1,1,3]、[-2,1,1]、[1、-1,4]]の場合、出力はTrue /
になります。これを解決するには、次の手順に従います-
- n:=vのサイズ
- 1つのマップweight_at_xを定義します
- max_x:=-2000、min_x:=2000
- iを初期化する場合:=0、i
- temp_x:=v [0、i]-v [1、i]
- max_x:=max_xとtemp_xの最大値
- min_x:=min_xとtemp_xの最小値
- weight_at_x [temp_x]:=weight_at_x [temp_x] + v [2、i]
- sum_tempの最後に(sum_temp + weight_at_x [x]の最後の要素)を挿入します
- partition_possible:=true
- partition_possible:=true
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; void is_valid_part(vector<vector<int>> &v){ int n = v.size(); map<int, int> weight_at_x; int max_x = -2000, min_x = 2000; for (int i = 0; i < n; i++) { int temp_x = v[0][i] - v[1][i]; max_x = max(max_x, temp_x); min_x = min(min_x, temp_x); weight_at_x[temp_x] += v[2][i]; } vector<int> sum_temp; sum_temp.push_back(0); for (int x = min_x; x <= max_x; x++) { sum_temp.push_back(sum_temp.back() + weight_at_x[x]); } int total_sum = sum_temp.back(); int partition_possible = false; for (int i = 1; i < sum_temp.size(); i++) { if (sum_temp[i] == total_sum - sum_temp[i]) partition_possible = true; if (sum_temp[i - 1] == total_sum - sum_temp[i]) partition_possible = true; } printf(partition_possible ? "TRUE" : "FALSE"); } int main() { vector<vector<int>> v = {{-1,1,3},{-2,1,1},{1,-1,4}}; is_valid_part(v); }
入力
{{-1,1,3},{-2,1,1},{1,-1,4}}
出力
TRUE
-
C++で線が円に接触または交差するかどうかを確認します
円と別の直線があるとします。私たちの仕事は、線が円に接しているか交差しているかを見つけることです。そうでない場合は、線が外側を通過します。したがって、以下のような3つの異なるケースがあります- ここでは、次の手順で解決します。これらは以下のようなものです- 中心と与えられた線の間の垂線Pを見つけます Pを半径r−と比較します rの場合、外部 P =rの場合、タッチします それ以外の場合は内部 垂直距離を取得するには、次の式を使用する必要があります(中心点は(h、k)) $$ \ frac {ah + bk + c} {\ sqrt {a ^ 2 + b ^ 2}} $$
-
線がC++の原点を通過するかどうかを確認します
このセクションでは、線分が原点を通過しているかどうかを確認する方法を説明します。線分の端点を表す2つの座標点があります。 アプローチは簡単です。直線の方程式を作成でき、方程式に(0、0)を入れて方程式が満たされる場合、直線は原点を通過します。 点がであると仮定すると、直線の方程式はこれらの2つの直線を通過します- $$ y-y_ {1} =\ left(\ frac {y_ {2} -y_ {1}} {x_ {2}-x_ {1}} \ right)* \ lgroup x-x_ {1} \ rgroup + c $$ x=0およびy=0とすると、次のようになります $$ x_ {1