[白俊]18513先生(c++)
2783 ワード
白駿18513泉
1.質問
質問リンク
2.方法
3.コード
#include <algorithm>
#include <iostream>
#include <queue>
#include <cstring>
#include <unordered_set> //unordered_set이 일반 set보다 속도가 빠름
using namespace std;
typedef long long ll;
int N, K;
int dx[2] = { 1, -1 };
queue<int> Q;
unordered_set<int> s;
ll BFS()
{
ll ans = 0, dis = 1;
while (!Q.empty())
{
int size = Q.size();
while (size--)
{
int housePos = Q.front();
Q.pop();
for (int i = 0; i < 2; i++)
{
int pos = housePos + dx[i];
if (!(s.count(pos) >= 1))
{
K--;
ans += dis;
s.insert(pos);
Q.push(pos);
if (K == 0)
return ans;
}
}
}
dis++;
}
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> K;
for (int i = 0; i < N; i++)
{
int a;
cin >> a;
Q.push(a);
s.insert(a);
}
cout << BFS() << "\n";
return 0;
}
4.時間の複雑さ
BFSアルゴリズムの問題を用い,隣接行列を用いた.
ここで,頂点ごとに接続された幹線はそれぞれ2本(1,−1)あるので,合計数はO(2 NK)であり,定数倍は無視できる.また,BFSナビゲーションでは頂点をO(NK)個,幹線もO(NK)個,O(NK+NK)=O(2 NK)=定数倍無視,時間複雑度はO(NK)とした.
5.結果
Reference
この問題について([白俊]18513先生(c++)), 我々は、より多くの情報をここで見つけました https://velog.io/@kgm4620/백준18513-샘터cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol