[2002 KAKAO BLIND RECRUITMENT]未破壊の建物
15021 ワード
質問リンク
https://programmers.co.kr/learn/courses/30/lessons/92344
アルゴリズム#アルゴリズム#
累計および 解答方法
最大25万件のクエリのため、重複する問題は時間内に解決できません.
問題は、建物の体力が0の場合、クエリーが影響を受け、範囲内で計算する値が同じであるため、imos法を使用してすべてのクエリーを処理し、体力がある場合に追加する必要がある値を加算することができます.
最後に既存の体力を加えれば体力が0より大きい建物を数え切ればいいです
コード#コード#
https://programmers.co.kr/learn/courses/30/lessons/92344
アルゴリズム#アルゴリズム#
累計
最大25万件のクエリのため、重複する問題は時間内に解決できません.
問題は、建物の体力が0の場合、クエリーが影響を受け、範囲内で計算する値が同じであるため、imos法を使用してすべてのクエリーを処理し、体力がある場合に追加する必要がある値を加算することができます.
最後に既存の体力を加えれば体力が0より大きい建物を数え切ればいいです
コード#コード#
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> board, vector<vector<int>> skill) {
int answer = 0;
//쿼리의 모든 행동 기록
vector<vector<int>> query(board.size()+1,vector<int>(board[0].size()+1,0));
for(auto s:skill){
//공격스킬
if(s[0]==1){
query[s[1]][s[2]] -=s[5];
query[s[1]][s[4]+1] +=s[5];
query[s[3]+1][s[2]] +=s[5];
query[s[3]+1][s[4]+1] -=s[5];
}else{//회복스킬
query[s[1]][s[2]] +=s[5];
query[s[1]][s[4]+1] -=s[5];
query[s[3]+1][s[2]] -=s[5];
query[s[3]+1][s[4]+1] +=s[5];
}
}
for(int i = 0;i < query.size();i++)
for(int j = 1;j < query[i].size();j++)
query[i][j] += query[i][j-1];
for(int j = 0;j<query[0].size();j++)
for(int i = 1;i<query.size();i++)
query[i][j] += query[i-1][j];
for(int i = 0;i<board.size();i++){
for(int j = 0;j<board[i].size();j++){
if((board[i][j]+query[i][j]) > 0)
answer++;
}
}
return answer;
}
Reference
この問題について([2002 KAKAO BLIND RECRUITMENT]未破壊の建物), 我々は、より多くの情報をここで見つけました https://velog.io/@tjdnfls1234/2022-KAKAO-BLIND-RECRUITMENT-파괴되지-않은-건물テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol