제출 #1310983

#제출 시각아이디문제언어결과실행 시간메모리
1310983namhhConstellation 3 (JOI20_constellation3)C++20
0 / 100
2 ms2104 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define fi first #define se second const int N = 2e3+5; int n,m,a[N],pre[N][N],val[N],sum[N],check[N]; struct vang{ int x,y,c; }; vang cut[N]; signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i = 1; i <= n; i++){ cin >> a[i]; for(int j = n; j >= n-a[i]+1; j--) pre[j][i] = 1; } cin >> m; for(int i = 1; i <= m; i++){ cin >> cut[i].x >> cut[i].y >> cut[i].c; swap(cut[i].x,cut[i].y); cut[i].x = n-cut[i].x+1; val[i] = cut[i].c; pre[cut[i].x][cut[i].y] = 0; } for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++) pre[i][j] += pre[i][j-1]+pre[i-1][j]-pre[i-1][j-1]; } for(int i = 1; i <= m; i++){ for(int j = 1; j <= m; j++){ if(i != j){ int x1 = min(cut[i].x,cut[j].x); int y1 = min(cut[i].y,cut[j].y); int x2 = max(cut[i].x,cut[j].x); int y2 = max(cut[i].y,cut[j].y); if(pre[x2][y2]-pre[x2][y1-1]-pre[x1-1][y2]+pre[x1-1][y1-1] == 0) sum[i] += val[j]; } } } int ans = 0; while(true){ int id = -1; int mx = -1e18; for(int i = 1; i <= m; i++){ if(!check[i] && sum[i] != 0){ if(mx < sum[i]){ mx = sum[i]; id = i; } } } if(id == -1) break; ans += val[id]; check[id] = 1; for(int i = 1; i <= m; i++){ if(!check[i] && i != id){ int x1 = min(cut[i].x,cut[id].x); int y1 = min(cut[i].y,cut[id].y); int x2 = max(cut[i].x,cut[id].x); int y2 = max(cut[i].y,cut[id].y); if(pre[x2][y2]-pre[x2][y1-1]-pre[x1-1][y2]+pre[x1-1][y1-1] == 0) sum[i] -= val[id]; } } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...