[C++]白俊2597号:巻尺
9140 ワード
質問リンク
2597号:巻き尺折りたたみ
問題の概要
巻き尺があり、巻き尺には赤点、青点、黄点のペアがあります.ルーラーを赤、青、黄の順に折りたたむ場合は、ルーラーの最終長さを求める必要があります.
方法
簡単な実施問題だと思いますが、思ったより時間がかかりそうです.
l、rという変数を宣言し、開始時に0と(ルーラーの長さ)に初期化します.
赤点の中間値midを求め、ベンド値を使用して青点、黄点、l、rの値を更新します.これは、l、rの中間値ではなくmid値が右か左側かに依存します.
青点も同様で、黄点とl、rの値を更新します.
最後に黄点の中間値を求め,l,rの値を更新する.
結果的にl,rの車を少し変形して出力すればいいのです.
実際、これは一度で正解できる問題ですが、少数の1位しか出力されない条件の下で、いくつかのエラーが発生したため、私たちは何度かWAを受け取りました.std::cout.precisionを利用したが,少数の2番目の位置で四捨五入することに気づかなかった.
std::coutを使用しようとするとコードが長くなりますのでprintfを使用したほうがいいです.
コード#コード#
2597号:巻き尺折りたたみ
問題の概要
巻き尺があり、巻き尺には赤点、青点、黄点のペアがあります.ルーラーを赤、青、黄の順に折りたたむ場合は、ルーラーの最終長さを求める必要があります.
方法
簡単な実施問題だと思いますが、思ったより時間がかかりそうです.
l、rという変数を宣言し、開始時に0と(ルーラーの長さ)に初期化します.
赤点の中間値midを求め、ベンド値を使用して青点、黄点、l、rの値を更新します.これは、l、rの中間値ではなくmid値が右か左側かに依存します.
青点も同様で、黄点とl、rの値を更新します.
最後に黄点の中間値を求め,l,rの値を更新する.
結果的にl,rの車を少し変形して出力すればいいのです.
実際、これは一度で正解できる問題ですが、少数の1位しか出力されない条件の下で、いくつかのエラーが発生したため、私たちは何度かWAを受け取りました.std::cout.precisionを利用したが,少数の2番目の位置で四捨五入することに気づかなかった.
std::coutを使用しようとするとコードが長くなりますのでprintfを使用したほうがいいです.
コード#コード#
#include <bits/stdc++.h>
using namespace std;
pair<double, double> arr[3];
double update(double mid, double num) { return mid + fabs(mid - num); }
void func(int idx, double& l, double& r)
{
if (arr[idx].first == arr[idx].second)
return;
double mid = (arr[idx].first + arr[idx].second) / 2;
for (int i = idx + 1; i < 3; i++)
{
arr[i].first = update(mid, arr[i].first);
arr[i].second = update(mid, arr[i].second);
}
l = update(mid, l);
if (l > r)
r = l;
l = mid;
}
int main(void)
{
double len;
cin >> len;
double left = 0, right = len;
for (int i = 0; i < 3; i++)
cin >> arr[i].first >> arr[i].second;
for (int i = 0; i < 3; i++)
func(i, left, right);
double res = right - left;
res *= 10;
res = floor(res);
res /= 10;
cout << fixed;
cout.precision(1);
cout << res;
return 0;
}
Reference
この問題について([C++]白俊2597号:巻尺), 我々は、より多くの情報をここで見つけました https://velog.io/@beclever/C-백준-2597번-줄자접기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol