結果
| 問題 |
No.1028 闇討ち
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-04-17 22:38:18 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 238 ms / 2,000 ms |
| コード長 | 1,924 bytes |
| コンパイル時間 | 1,376 ms |
| コンパイル使用メモリ | 104,128 KB |
| 最終ジャッジ日時 | 2025-01-09 20:24:44 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 20 |
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <numeric>
#include <deque>
using namespace std;
typedef long long int ll;
int a[1001][1001];
int aa[1001][1001];
vector<pair<int,int>> v[1001];
vector<int> l[1001];
vector<int> r[1001];
int rr[1001];
int main(){
cin.tie(nullptr);
ios::sync_with_stdio(false);
int n; cin >> n;
ll res=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin >> aa[i][j];
aa[i][j]--;
a[n-1-j][n-1-i]=aa[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
//cin >> a[i][j];
//a[i][j]--;
int ii=n-1-i;
res+=ii;
l[a[i][j]].push_back(j-ii);
r[a[i][j]].push_back(j+ii);
rr[a[i][j]]+=max(0,j-ii);
}
}
for(int i=0;i<n;i++){
sort(l[i].begin(),l[i].end());
sort(r[i].begin(),r[i].end());
}
for(int i=0;i<n;i++){
int mi=rr[i];
int nowl=0;
int nowr=0;
int leftnow=0;
int rightnow=n;
int leftcost=0;
int rightcost=rr[i];
while(nowl<n&&l[i][nowl]<=0){
nowl++;
rightnow--;
}
while(nowr<n&&r[i][nowr]<=0){
nowr++;
leftnow++;
}
for(int j=1;j<n;j++){
//printf("%d %d %d\n",mi,leftcost,rightcost );
leftcost+=leftnow;
rightcost-=rightnow;
while(nowl<n&&l[i][nowl]<=j){
nowl++;
rightnow--;
}
while(nowr<n&&r[i][nowr]<=j){
leftnow++;
nowr++;
}
mi=min(mi,leftcost+rightcost);
}
//printf("%d %d %d\n",mi,leftcost,rightcost);
//printf("\n");
res+=mi;
}
printf("%lld\n",res);
}