QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#251054 | #859. Civilizations | thomas_li# | AC ✓ | 1406ms | 20668kb | C++17 | 2.2kb | 2023-11-14 08:27:31 | 2023-11-14 08:27:33 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
#define rep(i,a,b) for(int i = a; i < (b); i++)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define PB push_back
#define FS first
#define SD second
#define cmx(x,y) x = max(x,y)
#define cmn(x,y) x = min(x,y)
#define ary(k) array<int,k>
typedef pair<int,int> pii;
typedef vector<int> vi;
const int dx[4] = {1,0,-1,0},dy[4] = {0,1,0,-1};
void solve(){
int n; cin >> n;
vector<vi> g(n,vi(n)),p(n,vi(n));
rep(i,0,n){
rep(j,0,n){
cin >> g[i][j];
}
}
vi we(n*n),len(n*n),cnt(n*n);
rep(i,0,n){
rep(j,0,n){
cin >> p[i][j];
}
}
rep(i,0,n){
rep(j,0,n){
we[p[i][j]] += g[i][j];
cnt[p[i][j]]++;
rep(k,0,4){
int x = i + dx[k], y = j + dy[k];
if(x < 0 || x >= n || y < 0 || y >= n) continue;
if(p[x][y] != p[i][j]) len[p[i][j]]++;
}
}
}
map<int,multiset<int>> mp;
auto add = [&](int i){
mp[len[i]].insert(we[i]);
};
auto rmv = [&](int i){
mp[len[i]].erase(mp[len[i]].find(we[i]));
if(mp[len[i]].empty()) mp.erase(len[i]);
};
rep(i,0,n*n)if(cnt[i]){
add(i);
}
int q; cin >> q; rep(_,0,q){
int x,y,z,A,B,C; cin >> x >> y >> z >> A >> B >> C;
x--; y--; int oz = p[x][y];
cnt[oz]--;
rmv(oz);
// remove contrib to oz
rep(k,0,4){
int nx = x + dx[k], ny = y + dy[k];
if(nx < 0 || nx >= n || ny < 0 || ny >= n) continue;
if(p[nx][ny] != oz) len[oz]--;
if(p[nx][ny] == oz) len[oz]++;
}
we[oz] -= g[x][y];
if(cnt[oz]) add(oz);
p[x][y] = z;
if(cnt[z]) rmv(z);
// add contrib to oz
rep(k,0,4){
int nx = x + dx[k], ny = y + dy[k];
if(nx < 0 || nx >= n || ny < 0 || ny >= n) continue;
if(p[nx][ny] != z) len[z]++;
if(p[nx][ny] == z) len[z]--;
}
we[z] += g[x][y];
cnt[z]++;
add(z);
//rep(i,0,n*n) cout << i << " " << we[i] << " " << len[i] << "\n";
int ans = -1e18;
for(auto&[b,v]:mp){
int a = *v.rbegin();
ans = max(ans,A*a+B*b+C*a*b);
a = *v.begin();
ans = max(ans,A*a+B*b+C*a*b);
}
cout << ans << " \n"[_==q-1];
}
}
signed main(){
cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit);
int t; cin >> t; while(t--) solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3420kb
input:
1 2 1 2 3 4 1 1 2 2 6 2 2 1 1 -1 0 1 2 2 1 2 -1 2 1 3 0 1 -1 1 2 3 2 0 0 1 1 3 1 1 1 2 2 3 -1 -1 -1
output:
5 -7 -2 10 20 -10
result:
ok 6 numbers
Test #2:
score: 0
Accepted
time: 215ms
memory: 3504kb
input:
5000 13 58 69 -65 -29 -100 3 26 -29 73 -29 -93 33 73 -77 -76 69 19 -77 -61 59 -15 85 81 -20 73 72 60 -46 -100 -59 -79 -74 -94 41 -24 -28 -5 36 70 -49 -59 -11 44 26 38 -73 92 -16 -37 -84 86 90 -19 9 -30 19 -24 88 46 -80 98 -75 14 -77 55 -41 22 -71 -75 78 -97 9 -99 95 30 41 -30 72 -31 -15 14 99 -98 -1...
output:
42103747013412 35680188991650 -6713336103808 -11059164282756 -1668545181184 -8186426524853 39582599038173 38802048647760 5920723833015 -21684163594486 -16595070672095 -11701923512925 -3008229643548 -18937722770187 56407046298711 71796328172997 -6315561061725 -24088994837750 -22482313580650 545583443...
result:
ok 174760 numbers
Test #3:
score: 0
Accepted
time: 470ms
memory: 20668kb
input:
2 500 34 47 -56 82 -99 2 82 11 39 -97 60 -10 -100 -55 -35 10 -40 60 -28 -77 -6 50 -44 -89 54 -41 -10 -97 -99 84 32 70 -4 8 65 -63 -35 82 49 -54 14 86 8 -89 -80 53 39 88 0 -21 66 -64 -95 13 22 -71 55 100 -47 25 -99 -48 20 96 -51 -36 -69 -25 -75 12 -52 32 90 -15 2 0 80 -16 -6 -37 -4 86 77 1 99 -45 98 ...
output:
3803944835096 14643945957494 86844324396 14134081642428 23365258674231 14366240146112 16003972712236 -1312148321120 15052574522629 -1038900390882 -1844962440900 -1547048075848 -709863397534 -933621408796 18767756935516 8688763765136 -1159725720058 -975612623034 -516745232422 -657752127188 1274638936...
result:
ok 200000 numbers
Test #4:
score: 0
Accepted
time: 1308ms
memory: 13128kb
input:
2 500 -32 97 -40 -3 -56 71 59 -46 -65 -35 34 96 31 23 -13 -49 -36 -52 -26 -25 -47 -5 -100 -15 87 -31 -56 -67 62 -98 -91 21 73 -98 7 100 -37 93 67 100 -84 -15 -87 -37 24 41 97 -66 -62 72 76 87 -56 -5 77 51 -41 -37 -38 -23 -46 -9 46 -84 100 82 75 -69 -31 54 50 93 75 0 72 -21 31 73 95 -48 -49 28 72 87 ...
output:
-760483926664 -1131478165059 1078736685982509 -1579623130444 140300847961300 1308301091342367 356660126273 -1621398232494 -540496041768 -1250956947650 103312925756 1704298676270655 1570063066892932 -1595534318544 506841370045292 -302881470126 1137224507971245 1271191760711178 721644233650750 1874110...
result:
ok 200000 numbers
Test #5:
score: 0
Accepted
time: 1406ms
memory: 13192kb
input:
2 500 57 88 82 38 56 82 23 15 39 39 30 61 4 52 8 77 25 14 64 88 76 59 12 48 7 87 17 9 77 20 51 17 52 50 63 45 41 12 3 90 63 33 81 96 4 60 77 6 62 24 38 81 91 5 73 13 14 41 70 59 28 12 65 53 20 8 26 80 11 22 10 41 65 39 67 56 74 76 88 32 82 26 63 46 21 99 13 82 83 63 9 61 38 96 85 85 75 63 20 43 100 ...
output:
986726997524044 510026146409654 1381034794876828 -925451281152 492247257135690 -1514433152120 23920898919391 174527347582808 -2435233882210 -3120004262886 -1833248353986 1027045228680394 1303004696907326 -1618235558654 -1044009435046 1322885462977946 8628545303575 1238031457650414 -2973521363059 -20...
result:
ok 200000 numbers