Submission #1548182
Source Code Expand
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#pragma GCC optimize ("-O3")
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
//---------------------------------------------------------------------------------------------------
struct LIS {
vector<int>& v;
vector<int> dp, id, ret, info;
// info 1:unused 2:使っても良い 3:必ず使う
int n, lis;
LIS(vector<int>& _v) : v(_v) {
n = v.size();
dp.resize(n, INT_MAX / 2);
id.resize(n, 0);
rep(i, 0, n) {
// 狭義単調増加列
//id[i] = lower_bound(dp.begin(), dp.end(), v[i]) - dp.begin();
// 広義単調増加列
id[i] = upper_bound(dp.begin(), dp.end(), v[i]) - dp.begin();
dp[id[i]] = v[i];
}
int nl = *max_element(id.begin(), id.end());
lis = nl;
ret.resize(nl + 1, 0);
rrep(i, n - 1, 0) if (id[i] == nl) ret[nl] = v[i], nl--;
info.resize(n);
vector<int> ma(n + 1), cnt(n);
ma[lis] = INT_MAX / 2;
rrep(i, n - 1, 0) {
// 狭義単調増加列
//if (ma[id[i] + 1] <= v[i]) info[i] = 1;
// 広義単調増加列
if (ma[id[i] + 1] < v[i]) info[i] = 1;
else cnt[id[i]]++, ma[id[i]] = max(ma[id[i]], v[i]);
}
rrep(i, n - 1, 0) if (info[i] == 0 && cnt[id[i]] == 1) info[i] = 3;
rep(i, 0, n) if (info[i] == 0) info[i] = 2;
lis--;
}
};
/*---------------------------------------------------------------------------------------------------
∧_∧
∧_∧ (´<_` ) Welcome to My Coding Space!
( ´_ゝ`) / ⌒i
/ \ | |
/ / ̄ ̄ ̄ ̄/ |
__(__ニつ/ _/ .| .|____
\/____/ (u ⊃
---------------------------------------------------------------------------------------------------*/
double PI = 2 * acos(0.0);
typedef long long ll;
string A;
int X1, Y1, X2, Y2, N, X[201010], Y[201010];
//---------------------------------------------------------------------------------------------------
void _main() {
cin >> X1 >> Y1 >> X2 >> Y2 >> N;
rep(i, 0, N) cin >> X[i] >> Y[i];
if (X1 > X2) {
X1 = 100000000 - X1;
X2 = 100000000 - X2;
rep(i, 0, N) X[i] = 100000000 - X[i];
}
if (Y1 > Y2) {
Y1 = 100000000 - Y1;
Y2 = 100000000 - Y2;
rep(i, 0, N) Y[i] = 100000000 - Y[i];
}
vector<pair<int, int>> v;
rep(i, 0, N) if (Y1 <= Y[i] && Y[i] <= Y2 && X1 <= X[i] && X[i] <= X2) v.push_back({ X[i], Y[i] });
sort(v.begin(), v.end());
vector<int> vv;
vv.push_back(-1);
fore(p, v) vv.push_back(p.second);
vv.push_back(INT_MAX / 2 - 1);
LIS lis(vv);
double ans = 100.0 * (X2 - X1 + Y2 - Y1);
ans += (5.0 * PI - 20.0) * lis.lis;
if (lis.lis == min(X2 - X1, Y2 - Y1) + 1) ans += 5.0 * PI;
printf("%.15f\n", ans);
}
Submission Info
Submission Time |
|
Task |
C - Fountain Walk |
User |
hamayanhamayan |
Language |
C++14 (GCC 5.4.1) |
Score |
900 |
Code Size |
3296 Byte |
Status |
AC |
Exec Time |
75 ms |
Memory |
9072 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
900 / 900 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample_01.txt, sample_02.txt, sample_03.txt |
All |
sample_01.txt, sample_02.txt, sample_03.txt, sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt, subtask_1_31.txt, subtask_1_32.txt, subtask_1_33.txt, subtask_1_34.txt, subtask_1_35.txt, subtask_1_36.txt, subtask_1_37.txt, subtask_1_38.txt, subtask_1_39.txt, subtask_1_40.txt, subtask_1_41.txt |
Case Name |
Status |
Exec Time |
Memory |
sample_01.txt |
AC |
1 ms |
256 KB |
sample_02.txt |
AC |
1 ms |
256 KB |
sample_03.txt |
AC |
1 ms |
256 KB |
subtask_1_01.txt |
AC |
1 ms |
256 KB |
subtask_1_02.txt |
AC |
1 ms |
256 KB |
subtask_1_03.txt |
AC |
1 ms |
256 KB |
subtask_1_04.txt |
AC |
1 ms |
256 KB |
subtask_1_05.txt |
AC |
1 ms |
256 KB |
subtask_1_06.txt |
AC |
1 ms |
256 KB |
subtask_1_07.txt |
AC |
1 ms |
256 KB |
subtask_1_08.txt |
AC |
1 ms |
256 KB |
subtask_1_09.txt |
AC |
14 ms |
768 KB |
subtask_1_10.txt |
AC |
29 ms |
1408 KB |
subtask_1_11.txt |
AC |
8 ms |
512 KB |
subtask_1_12.txt |
AC |
70 ms |
9072 KB |
subtask_1_13.txt |
AC |
30 ms |
1536 KB |
subtask_1_14.txt |
AC |
14 ms |
896 KB |
subtask_1_15.txt |
AC |
7 ms |
512 KB |
subtask_1_16.txt |
AC |
75 ms |
9072 KB |
subtask_1_17.txt |
AC |
26 ms |
1280 KB |
subtask_1_18.txt |
AC |
20 ms |
1024 KB |
subtask_1_19.txt |
AC |
20 ms |
1152 KB |
subtask_1_20.txt |
AC |
68 ms |
9072 KB |
subtask_1_21.txt |
AC |
70 ms |
9072 KB |
subtask_1_22.txt |
AC |
70 ms |
9072 KB |
subtask_1_23.txt |
AC |
70 ms |
9072 KB |
subtask_1_24.txt |
AC |
1 ms |
256 KB |
subtask_1_25.txt |
AC |
1 ms |
256 KB |
subtask_1_26.txt |
AC |
1 ms |
256 KB |
subtask_1_27.txt |
AC |
1 ms |
256 KB |
subtask_1_28.txt |
AC |
37 ms |
2048 KB |
subtask_1_29.txt |
AC |
39 ms |
2048 KB |
subtask_1_30.txt |
AC |
70 ms |
8304 KB |
subtask_1_31.txt |
AC |
47 ms |
8304 KB |
subtask_1_32.txt |
AC |
54 ms |
9072 KB |
subtask_1_33.txt |
AC |
53 ms |
8688 KB |
subtask_1_34.txt |
AC |
48 ms |
8304 KB |
subtask_1_35.txt |
AC |
57 ms |
8304 KB |
subtask_1_36.txt |
AC |
59 ms |
8304 KB |
subtask_1_37.txt |
AC |
63 ms |
8944 KB |
subtask_1_38.txt |
AC |
59 ms |
8688 KB |
subtask_1_39.txt |
AC |
59 ms |
8560 KB |
subtask_1_40.txt |
AC |
55 ms |
8688 KB |
subtask_1_41.txt |
AC |
57 ms |
8688 KB |