Submission #8316658
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define REP(i,n) for(int i=0,_n=(int)(n);i<_n;++i)
#define ALL(v) (v).begin(),(v).end()
#define CLR(t,v) memset(t,(v),sizeof(t))
template<class T1,class T2>ostream& operator<<(ostream& os,const pair<T1,T2>&a){return os<<"("<<a.first<<","<<a.second<< ")";}
template<class T>void pv(T a,T b){for(T i=a;i!=b;++i)cout<<(*i)<<" ";cout<<endl;}
template<class T>void chmin(T&a,const T&b){if(a>b)a=b;}
template<class T>void chmax(T&a,const T&b){if(a<b)a=b;}
int nextInt() { int x; scanf("%d", &x); return x;}
ll nextLong() { ll x; scanf("%lld", &x); return x;}
struct BIT {
using Val = int;
int n;
vector<Val> tree;
BIT(int n):n(n),tree(n+1) {}
void fill(Val val) {
REP(i, n+1) tree[i] = (i&-i) * val;
}
void add(int idx, Val val) {
for (int x=idx+1; x<=n; x+=x&-x) tree[x] += val;
}
// sum[0, idx]
Val range(int idx) {
Val sum=0;
for (int x=idx+1; x>0; x-=x&-x) sum += tree[x];
return sum;
}
};
const int INF = 1001001001;
const int MAX_N = 2005;
int dp[MAX_N][MAX_N];
int idx_b[MAX_N];
int idx_w[MAX_N];
int bb[2*MAX_N][MAX_N]; // bb[i][j] := 元の列のi番目より左にある B のうち番号が j より大きいものの個数。
int ww[2*MAX_N][MAX_N];
int main2() {
int N = nextInt();
vector<char> c(2*N);
vector<int> a(2*N);
REP(i, 2*N) {
cin >> c[i] >> a[i];
if (c[i] == 'B') {
idx_b[a[i]] = i;
} else {
idx_w[a[i]] = i;
}
}
{
CLR(bb, 0);
BIT bit(2*N+10);
int s = 0;
REP(i, 2*N) {
if (c[i] == 'B') {
bit.add(a[i], 1);
s++;
}
for (int j = 0; j <= N; j++) {
bb[i][j] = s - bit.range(j);
}
}
}
{
CLR(ww, 0);
BIT bit(2*N+10);
int s = 0;
REP(i, 2*N) {
if (c[i] == 'W') {
bit.add(a[i], 1);
s++;
}
for (int j = 0; j <= N; j++) {
ww[i][j] = s - bit.range(j);
}
}
}
REP(i, MAX_N) REP(j, MAX_N) dp[i][j] = INF;
dp[0][0] = 0;
REP(w, N+1) REP(b, N+1) {
if (w == 0 && b == 0) continue;
int val = INF;
if (w - 1 >= 0) {
int i = idx_w[w];
int cost = bb[i][b] + ww[i][w];
chmin(val, dp[w-1][b] + cost);
}
if (b - 1 >= 0) {
int i = idx_b[b];
int cost = bb[i][b] + ww[i][w];
chmin(val, dp[w][b-1] + cost);
}
dp[w][b] = val;
}
int ans = dp[N][N];
cout << ans << endl;
return 0;
}
int main() {
#ifdef LOCAL
for (;!cin.eof();cin>>ws)
#endif
main2();
return 0;
}
Submission Info
Submission Time
2019-11-07 00:41:33+0900
Task
E - Sorted and Sorted
User
hs484
Language
C++14 (GCC 5.4.1)
Score
600
Code Size
2650 Byte
Status
AC
Exec Time
132 ms
Memory
78848 KB
Compile Error
./Main.cpp: In function ‘int nextInt()’:
./Main.cpp:13:39: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int nextInt() { int x; scanf("%d", &x); return x;}
^
./Main.cpp: In function ‘ll nextLong()’:
./Main.cpp:14:40: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
ll nextLong() { ll x; scanf("%lld", &x); return x;}
^
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
600 / 600
Status
Set Name
Test Cases
Sample
0_000.txt, 0_001.txt, 0_002.txt
All
0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 1_026.txt, 1_027.txt, 1_028.txt, 1_029.txt, 1_030.txt, 1_031.txt, 1_032.txt, 1_033.txt, 1_034.txt, 1_035.txt
Case Name
Status
Exec Time
Memory
0_000.txt
AC
22 ms
78720 KB
0_001.txt
AC
22 ms
78720 KB
0_002.txt
AC
22 ms
78720 KB
1_003.txt
AC
22 ms
78720 KB
1_004.txt
AC
22 ms
78720 KB
1_005.txt
AC
22 ms
78720 KB
1_006.txt
AC
22 ms
78720 KB
1_007.txt
AC
22 ms
78720 KB
1_008.txt
AC
22 ms
78720 KB
1_009.txt
AC
22 ms
78720 KB
1_010.txt
AC
22 ms
78720 KB
1_011.txt
AC
22 ms
78720 KB
1_012.txt
AC
21 ms
78720 KB
1_013.txt
AC
22 ms
78720 KB
1_014.txt
AC
104 ms
78848 KB
1_015.txt
AC
31 ms
78848 KB
1_016.txt
AC
81 ms
78848 KB
1_017.txt
AC
44 ms
78848 KB
1_018.txt
AC
22 ms
78720 KB
1_019.txt
AC
28 ms
78848 KB
1_020.txt
AC
92 ms
78848 KB
1_021.txt
AC
47 ms
78848 KB
1_022.txt
AC
33 ms
78848 KB
1_023.txt
AC
82 ms
78848 KB
1_024.txt
AC
127 ms
78848 KB
1_025.txt
AC
129 ms
78848 KB
1_026.txt
AC
129 ms
78848 KB
1_027.txt
AC
129 ms
78848 KB
1_028.txt
AC
129 ms
78848 KB
1_029.txt
AC
130 ms
78848 KB
1_030.txt
AC
130 ms
78848 KB
1_031.txt
AC
130 ms
78848 KB
1_032.txt
AC
131 ms
78848 KB
1_033.txt
AC
130 ms
78848 KB
1_034.txt
AC
132 ms
78848 KB
1_035.txt
AC
131 ms
78848 KB