BOJ 1276-架橋
タイムアウトメモリ制限正解の送信正解正解正解正解正解率2秒128 MB 27611810443.697%
2010年に芦原区に多層橋梁を架けることが決定し、実際の設計が完成した.しかし、これは当たり前かもしれませんが、橋脚がなく、橋が空に浮かぶことはあり得ないので、橋脚を適当に設置します.
橋脚の取り付け規則は以下の通りである.橋の両端は別の橋や地面に取り付け、できるだけ橋脚の長さを最小限に抑える必要があります.しかし、橋はすべて平らで、橋は立てなければなりません.橋脚は他の橋脚と交差してはならない.
例は上図のとおりです.左図は設計された橋、右図は橋脚を置く橋を示しています.そして橋脚の全長が14であることがわかります.
問題は、橋があるときに総橋脚の長さとを求めることです.
第1行は、ブリッジの個数を表す整数N(1≦N≦100)を与える.2行目からN+1行目までは、各行に橋の位置を表す3つの整数Y,X 1,X 2があり、これは(X 1,Y)~(X 2,Y)まで橋があることを意味する.すべての座標は10000を超えない自然数です.次に、床のY座標を0とする.(X2 > X1+1)
1行目は橋脚の長さの合計を出力します.
xの範囲は0から10000なので、下から橋を架けながら最大高さを保存すれば良いと思います.
実際には、橋が重なることもなく、橋の数が最大100個ということなので、十分に体現しても良いでしょう.
金の問題は簡単すぎるのではないでしょうか.このような考えが生まれたのは、論理的な間違いがないので、そのまま体現されているからだ.
pair,pair,int,int>はこの資料型が大嫌いですが、構造体を作りたくないので、このようにしました.
y軸(高さ)を基準としてアレイをソートし、x 1座標とx 2座標の交差角の高さをansに遍歴的に加算した.
そしてx 1~x 2における高さ(height配列)を初期化した.
質問する
2010年に芦原区に多層橋梁を架けることが決定し、実際の設計が完成した.しかし、これは当たり前かもしれませんが、橋脚がなく、橋が空に浮かぶことはあり得ないので、橋脚を適当に設置します.
橋脚の取り付け規則は以下の通りである.橋の両端は別の橋や地面に取り付け、できるだけ橋脚の長さを最小限に抑える必要があります.しかし、橋はすべて平らで、橋は立てなければなりません.橋脚は他の橋脚と交差してはならない.
例は上図のとおりです.左図は設計された橋、右図は橋脚を置く橋を示しています.そして橋脚の全長が14であることがわかります.
問題は、橋があるときに総橋脚の長さとを求めることです.
入力
第1行は、ブリッジの個数を表す整数N(1≦N≦100)を与える.2行目からN+1行目までは、各行に橋の位置を表す3つの整数Y,X 1,X 2があり、これは(X 1,Y)~(X 2,Y)まで橋があることを意味する.すべての座標は10000を超えない自然数です.次に、床のY座標を0とする.(X2 > X1+1)
しゅつりょく
1行目は橋脚の長さの合計を出力します.
に近づく
xの範囲は0から10000なので、下から橋を架けながら最大高さを保存すれば良いと思います.
実際には、橋が重なることもなく、橋の数が最大100個ということなので、十分に体現しても良いでしょう.
金の問題は簡単すぎるのではないでしょうか.このような考えが生まれたのは、論理的な間違いがないので、そのまま体現されているからだ.
に答える
pair,pair,int,int>はこの資料型が大嫌いですが、構造体を作りたくないので、このようにしました.
y軸(高さ)を基準としてアレイをソートし、x 1座標とx 2座標の交差角の高さをansに遍歴的に加算した.
そしてx 1~x 2における高さ(height配列)を初期化した.
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define FUP(i, a, b) for(int i = a; i <= b; i++)
#define FDOWN(i, a, b) for(int i = a; i >= b; i--)
#define MS(a, b) memset(a, b, sizeof(a))
#define ALL(v) v.begin(), v.end()
#define CIN(a) cin >> a;
#define CIN2(a, b) cin >> a >> b
#define CIN3(a, b, c) cin >> a >> b >> c
#define COUT(a) cout << a
#define COUT2(a, b) cout << a << ' ' << b
#define COUT3(a, b, c) cout << a << ' ' << b << ' ' << c
#define ENDL cout << '\n'
int dy[4] = { -1, 1, 0, 0 };
int dx[4] = { 0, 0, 1, -1 };
int N, ans = 0, height[10000];
pair<int, pair<int, int>> arr[100];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
MS(height, 0);
CIN(N);
FUP(i, 0, N - 1)
{
CIN3(arr[i].first, arr[i].second.first, arr[i].second.second);
}
sort(arr, arr + N);
FUP(i, 0, N - 1)
{
int y = arr[i].first;
int left = arr[i].second.first;
int right = arr[i].second.second;
ans += (y - height[left]);
ans += (y - height[right - 1]);
FUP(h, left, right - 1) height[h] = y;
}
COUT(ans);
return 0;
}
Reference
この問題について(BOJ 1276-架橋), 我々は、より多くの情報をここで見つけました https://velog.io/@gyuho/BOJ-1276-교각-놓기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol